如何使用 boost/python numpy 库进行编译? make 找不到库文件

Posted

技术标签:

【中文标题】如何使用 boost/python numpy 库进行编译? make 找不到库文件【英文标题】:How to compile with boost/python numpy library? Make can't find the library files 【发布时间】:2020-07-20 16:26:37 【问题描述】:

我有一个 C++ 扩展,它使用来自 Boost/Python 的 numpy 库。这是 .h 文件:

#pragma once
#include <string>
#include <exception>
#include <utility>
#include <deque>
#include <map>
#include <vector>
#include <random>
#include <time.h>


#include <python3.6m/Python.h>
#include <boost169/boost/python/object/pickle_support.hpp>
#include <boost169/boost/python/dict.hpp>
#include <boost169/boost/python.hpp>
#include <boost169/boost/python/numpy.hpp>

class MyClass : public Node
public:
    // attributes
    // functions

Makefile:

myclass.o:myclass.cpp node.cpp address.cpp foo.cpp info.cpp container.cpp
    g++ -O3 -std=c++11 -fPIC -I/usr/include/python3.6m myclass.cpp node.cpp address.cpp foo.cpp info.cpp container.cpp -c -lpython3.6m -lboost_numpy36 -lboost_python3


MyClass.so:myclass.o node.o address.o foo.o info.o container.o
    g++ -O3 -std=c++11 -L /lib64 -shared myclass.o node.o address.o foo.o info.o container.o -o MyClass.so -lpython3.6m -lboost_numpy36 -lboost_python3

而usr/lib64文件夹包含以下文件:

locate boost_numpy
/usr/lib64/libboost_numpy27.so.1.69.0
/usr/lib64/libboost_numpy36.so.1.69.0
/usr/lib64/boost169/libboost_numpy27.so
/usr/lib64/boost169/libboost_numpy36.so

但是当我尝试编译时,它给了我一个错误:

/usr/bin/ld: cannot find -lboost_numpy36
collect2: error: ld returned 1 exit status
make: *** [MyClass.so] Error 1

它用不同的名字给了我相同的结果:

/usr/bin/ld: cannot find -lboost169/boost_numpy36
collect2: error: ld returned 1 exit status
make: *** [MyClass.so] Error 1

/usr/bin/ld: cannot find -lboost_numpy36.so.1.69.0
collect2: error: ld returned 1 exit status
make: *** [MyClass.so] Error 1

我有什么遗漏吗? boost_python3 和 python3.6m 在 lib64 目录中都有一个 .so 文件,它们编译得很好

谢谢

【问题讨论】:

【参考方案1】:

-L /lib64 后面添加了这个,它起作用了: -L /lib64/boost169

【讨论】:

以上是关于如何使用 boost/python numpy 库进行编译? make 找不到库文件的主要内容,如果未能解决你的问题,请参考以下文章

将 boost::python::numpy::ndarray 作为 boost::python 函数的(默认与否)参数传递?

如何使用boost.python中的-fPIC编译静态库

C++ Boost Python numpy 数组初始化

如何将 asyncio 与 boost.python 一起使用?

如何组织 python / Boost Python 项目

用 boost.python 暴露 std::vector<double>