导入Boost Python模块(function_impl_base9max_arityEv)时出错

时间:2019-04-01 13:14:16

标签: python c++

我正在尝试使用boost-python构建一个hello world C ++ Python扩展。

我从https://www.mantidproject.org/Boost_Python_Introduction获得了以下源代码:

 // test.cpp
 #include <iostream>
 #include <boost/python.hpp>


 void sayHello()
 {
   std::cout << "Hello, Python!\n";
 }

 BOOST_PYTHON_MODULE(test)  // Name here must match the name of the final shared library, i.e. mantid.dll or mantid.so
 {
    boost::python::def("sayHello", &sayHello);
 }

但是,当我尝试使用以下命令进行编译时:

g++ -fPIC -I/usr/include/python3.6m test.cpp -c
g++ -shared test.o -o test.so -I/usr/include/python3.6m -I/lib64/libboost_python3

此命令成功编译了代码并创建了库文件test.so。

但是,当我尝试在python3中导入模块时,出现以下错误:

导入错误:/ home / yt / C ++ / test.so:未定义的符号:_ZNK5boost6python7objects21py_function_impl_base9max_arityEv

链接Import Error on boost python hello program似乎表明该命令 我上面使用的方法可以通过添加 -I / usr / include / python3.6m -I / lib64 / libboost_python3 来解决此问题,但不能。

我在做什么错了?

谢谢!

操作系统:Fedora 29 x86_64

1 个答案:

答案 0 :(得分:1)

谢谢大家!

问题是链接器命令。正确的是:

g ++ -fPIC -I / usr / include / python3.6m test.cpp -c

g ++ -L / lib64 -shared test.o -o test.so -lpython3.6m -lboost_python3

现在它可以在Fedora 29上使用