如何使用 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 函数的(默认与否)参数传递?