boost python库链接问题 - 未定义符号

时间:2017-08-08 19:14:18

标签: python c++ python-3.x ubuntu boost

我正在使用为python3构建的boost-python来公开一个简单的hello-world程序。可以在此处找到示例:https://github.com/TNG/boost-python-examples/blob/master/01-HelloWorld/hello.cpp

我运行以下命令来获取共享对象:

g++ -fPIC -c -I/usr/include/python3.4m -I/usr/include/python3.4m  -Wno-unused-result -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -L/usr/lib/x86_64-linux-gnu/libboost_python-py34 hello.cpp

g++ -shared hello.o -o hello.so

在此之后,我运行python3 -c 'import hello'命令,我收到以下错误: 回溯(最近一次调用最后一次):

  

文件“”,第1行,in   ImportError:hello.so:未定义的符号:_ZTIN5boost6python7objects21py_function_impl_baseE

我部分理解这个问题可能是因为我的boost-python安装可能是为另一个python版本(例如python2.7)构建的。当我运行命令时:

ls /usr/lib/x86_64-linux-gnu/libboost_python*.so

有三个.so文件:

1. libboost_python-py27.so
2. libboost_python-py34.so
3. libboost_python.so

如何规避这个问题?

2 个答案:

答案 0 :(得分:1)

使用pkg-config检索boost库的ldflags和cflags

答案 1 :(得分:0)

安装miniconda可能是您的选择。 https://conda.io/miniconda.html

这将提供一个完整,孤立的python环境。那你可以 conda install boost

我已经在我的系统上对此进行了测试,效果很好。我从http://www.shocksolution.com/python-basics-tutorials-and-examples/linking-python-and-c-with-boostpython/

修改了Makefile

我的Makefile可以在这里找到: https://github.com/grelleum/boost-python-with-anaconda