Я хочу построить это openNERO для себя.Согласно его руководству по сборке , я также собираю Boost 1.48 с python 2.7.2.С 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.Но я собрал Boost с параметром --with-python-version=2.7
.Более того, я использую update-alternatives
, чтобы выбрать Python 2.7.Так почему же PY_VERSION_HEX
все еще не верен?