我想为自己构建这个openNERO。根据它的building tutorial,我还用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:感谢this post。我使用nm
检查init_module
的签名,但它打印出来:
$nm libboost_python.so.1.48.0 |c++filt|grep init_module
0002e710 T boost::python::detail::init_module(PyModuleDef&, void (*)())
以下是source file:
的摘录# 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
仍然不正确?
答案 0 :(得分:1)
我记得我首先使用python 3.2构建了boost,因此我删除了所有生成的文件并重新进行了boost。这一切都是正确的。似乎旧文件不会被覆盖。