我试图在我的python项目中运行c++代码。这是recompile.sh,它很好地构建了共享对象。
g++ -fPIC -shared -I /home/pathto python/python3.8/ src/example.hpp
/usr/lib/x86_64-linux-gnu/libboost_python38.so -o src/example.so
example.hpp:
#include <boost/python.hpp>
int get_answer_c(){
return 42;
}
BOOST_PYTHON_MODULE(example){
boost::python::def("get_answer", get_answer_c);
}
当我尝试导入模块示例时,我得到这个错误:
AttributeError: ./src/example.so: undefined symbol: get_answer
EDIT:
只有当我使用.cpp
而不是.hpp
时才能正确编译
(libboost_python38.so
在src/example.cpp
之后)
我使用这个makefile
正确编译了它。
首先编译example.o
,然后是example.so
。
项目-lboost_python38
必须在src/example.o
之后
我保持代码在.cpp
,因为.hpp
似乎头。
makefile
src/example.so: src/example.o
g++
-shared
-L/usr/lib/x86_64-linux-gnu/
-o src/example.so
src/example.o
-lboost_python38
src/example.o:
g++
-c
-fPIC
-I/usr/include/python3.8
-o src/example.o
src/example.cpp
clean:
rm src/example.o src/example.so
编辑:
我得到正确的模块,即使是
g++ -fPIC -shared -I/usr/include/python3.8 -o src/example.so src/example.cpp /usr/lib/x86_64-linux-gnu/libboost_python38.so
或不同顺序
g++ -fPIC -shared -I/usr/include/python3.8 src/example.cpp /usr/lib/x86_64-linux-gnu/libboost_python38.so -o src/example.so
我总是去文件夹src
,运行python3.8
和运行行
import example
example.get_answer()