链接libboost_python时发生错误

1 投票
1 回答
4590 浏览
提问于 2025-04-17 07:47

我想为自己搭建这个 openNERO。根据它的 搭建教程,我还需要用 Python 2.7.2 来构建 Boost 1.48。使用 Boost 后,openNERO 成功编译了。但是在链接的时候,ld 报错说:

CMakeFiles/OpenNERO.dir/scripting/scripting.cpp.o: In function `initOpenNero':
~/svn/opennero/trunk/source/scripting/scripting.cpp:21: undefined reference to `boost::python::detail::init_module(char const*, void (*)())'
/usr/local/lib/libboost_python.so: undefined reference to `PyModule_Create2'
/usr/local/lib/libboost_python.so: undefined reference to `PyBytes_AsString'
/usr/local/lib/libboost_python.so: undefined reference to `PyBytes_Size'
/usr/local/lib/libboost_python.so: undefined reference to `_PyUnicode_AsString'
/usr/local/lib/libboost_python.so: undefined reference to `PyUnicode_InternFromString'
collect2: ld returned 1 exit status

有没有人能给我一些关于这个问题的提示?谢谢~

更新 1: [已删除]

更新 2: 感谢 这篇帖子。我用 nm 检查了 init_module 的签名,但它打印出来的是:

$nm libboost_python.so.1.48.0 |c++filt|grep init_module
0002e710 T boost::python::detail::init_module(PyModuleDef&, void (*)())

这是来自 源文件 的一段代码:

#  if PY_VERSION_HEX >= 0x03000000
BOOST_PYTHON_DECL PyObject* init_module(PyModuleDef&, void(*)());
#  else
BOOST_PYTHON_DECL PyObject* init_module(char const* name, void(*)());
#  endif

所以它是 Python 3.x 的。但是我确实是用参数 --with-python-version=2.7 来构建 Boost 的。此外,我还用 update-alternatives 选择了 Python 2.7。那么为什么 PY_VERSION_HEX 还是不正确呢?

1 个回答

1

我记得我第一次用 Python 3.2 来构建 boost,所以我把所有生成的文件都删除了,然后又重新构建了一遍 boost。这次一切都正常了。看起来旧的文件是不会被新文件覆盖的。

撰写回答