链接问题 Boost.Python

Posted

技术标签:

【中文标题】链接问题 Boost.Python【英文标题】:Linking issues Boost.Python 【发布时间】:2018-05-04 20:20:09 【问题描述】:

尝试使用 Boost Python,但遇到链接问题。

代码,hello.cpp:

#include <boost/python.hpp>
char const* greet() 
  return "hellow, world";


int main() 
  return 0;


BOOST_PYTHON_MODULE(hello_ext) 
using namespace boost::python;
def("greet", greet);

编译:

g++ hello.cpp -L/usr/lib/x86_64-linux-gnu/ -I/usr/include/python3.5/ -lboost_python  /usr/lib/x86_64-linux-gnu/libpython3.5m.so -lboost_system

得到以下链接错误:

tmp/ccJ8ST4B.o: In function `PyInit_hello_ext':
hello.cpp:(.text+0x94): undefined reference to `boost::python::detail::init_module(PyModuleDef&, void (*)())'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyString_Size'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyUnicodeUCS4_FromEncodedObject'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyFile_FromString'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyString_Type'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyInt_Type'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyString_FromString'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyUnicodeUCS4_AsWideChar'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyString_FromStringAndSize'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `Py_InitModule4_64'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyString_FromFormat'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyNumber_Divide'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyNumber_InPlaceDivide'
/usr/lib/x86_64-linux-gnu//libboost_python.so: undefined reference to `PyInt_AsLong'

有什么想法吗?

【问题讨论】:

道歉已修复 【参考方案1】:

编译时在这里为库提供正确、准确和有序的路径。请使用以下命令并尝试,如果它不起作用set LD_LIBRARY_PATH(仅在程序目录路径中设置)到程序目录路径。这会将所有必需的库链接到您的程序目录。

g++  -I/usr/include/python3.5/  /usr/lib/x86_64-linux-gnu/libpython3.5m.so  -L/usr/lib/x86_64-linux-gnu/ -lboost_python -lboost_system hello.cpp -o hello

如果上面的行不工作

export LD_LIBRARY_PATH=/program_path:$LD_LIBRARY_PATH

【讨论】:

以上是关于链接问题 Boost.Python的主要内容,如果未能解决你的问题,请参考以下文章

如何实现网页超链接的定位问题

GCC 链接顺序问题

符号链接和硬链接有啥区别?

想【C++ 】高手发起挑战,请教一个【动态链接库 dll 和 类成员函数 显式链接】问题

opencv静态链接库cmake链接顺序问题

导航栏链接的悬停框问题