Ошибка при связывании libboost_python - PullRequest
1 голос
/ 06 декабря 2011

Я хочу построить это 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 все еще не верен?

1 Ответ

1 голос
/ 07 декабря 2011

Я помню, что сначала создал boost с python 3.2, поэтому я удалил все сгенерированные файлы и снова перестроил boost. На этот раз все правильно. Похоже, что старые файлы не будут перезаписаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...