【发布时间】:2017-08-08 19:14:17
【问题描述】:
我正在使用为 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' 命令并收到以下错误:
Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 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
如何规避这个问题?
【问题讨论】:
-
您可以尝试使用 -L 和 -I 添加完整的限定符,而不是 'g++ -shared hello.o -o hello.so'。我遇到了同样的问题,它对我有用。
标签: python c++ python-3.x ubuntu boost