Undefined Symbol in C++ When Loading a Python Shared Library

Я пытался запустить свой проект, но столкнулся с проблемой. После длительной отладки я выявил проблему, но не знаю, как действовать дальше.

Немного предыстории, я использую скрипт python внутри кода C++. Это в некоторой степени документировано в Python, и мне удалось заставить его работать очень хорошо в моем базовом исполняемом файле. #include и -lpython2.6 и все было замечательно.

Однако возникли трудности при запуске этого скрипта python из разделяемой библиотеки(.so). Эта разделяемая библиотека "загружается" как "модуль" системой моделирования (OpenRAVE). Система взаимодействует с этим модулем, используя виртуальный метод для "модулей" под названием SendCommand. Затем модуль запускает поток boost::thread, предоставляя python свой собственный поток, и возвращается в систему моделирования. Однако, когда python начинает импортировать свои модули и таким образом загружать свои динамические библиотеки, он терпит неудачу, как я предполагаю, из-за следующей ошибки:

 ImportError: /usr/lib/python2.6/dist-packages/numpy/core/multiarray.so: undefined symbol: _Py_ZeroStruct 

Я запустил ldd для моего исполняемого файла и разделяемой библиотеки, разницы нет. Я также выполнил nm -D для вышеуказанного файла, _Py_ZeroStruct действительно не определен. Если вам нужны распечатки команд, я с удовольствием их предоставлю. Любой совет будет очень признателен, спасибо.

Вот полная ошибка python:

Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/numpy/__init__.py", line 130, in 
    import add_newdocs
  File "/usr/lib/python2.6/dist-packages/numpy/add_newdocs.py", line 9, in 
    from lib import add_newdoc
  File "/usr/lib/python2.6/dist-packages/numpy/lib/__init__.py", line 4, in 
    from type_check import *
  File "/usr/lib/python2.6/dist-packages/numpy/lib/type_check.py", line 8, in 
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.6/dist-packages/numpy/core/__init__.py", line 5, in 
    import multiarray
ImportError: /usr/lib/python2.6/dist-packages/numpy/core/multiarray.so: undefined symbol: _Py_ZeroStruct
Traceback (most recent call last):
  File "/home/constantin/workspace/OpenRAVE/src/grasp_behavior_2.py", line 3, in 
    from openravepy import *
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 35, in 
    openravepy_currentversion = loadlatest()
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 16, in loadlatest
    return _loadversion('_openravepy_')
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 19, in _loadversion
    mainpackage = __import__("openravepy", globals(), locals(), [targetname])
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/_openravepy_/__init__.py", line 29, in 
    from openravepy_int import *
ImportError: numpy.core.multiarray failed to import
12
задан Rafael 28 February 2018 в 07:33
поделиться