Встраивание питона в C, неопределенный символ: PyExc_ImportError - PullRequest
4 голосов
/ 22 января 2011

Я пытаюсь написать плагин для Audacious Media Player, который загружает модуль python. Код для вставки в Python взят из источника python-2.6 (embed / Demo). Это компилируется с командной строкой,

gcc -o demo demo.c -lpython2.6 -lm -L/usr/lib/python2.6/config

Я добавил -lpython2.6 -lm -L/usr/lib/python2.6/config к аргументам CC.

И он загружает скрипт Python, который импортирует модули pygtk и gtk, это прекрасно работает.

Но после того, как я скомпилировал плагин (совместно используемую библиотеку), возникает следующая ошибка (это не характерно для gtk, как я выяснил, то же самое для любого модуля python, который использует собственные библиотеки)

 Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "./xyz.py", line 7, in <module>
    import gtk
  File "/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py", line 30, in <module>
    import gobject as _gobject
  File "/usr/lib/pymodules/python2.6/gtk-2.0/gobject/__init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/lib/pymodules/python2.6/gtk-2.0/glib/__init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/lib/libpyglib-2.0-python2.6.so.0: undefined symbol: PyExc_ImportError

В коде C для настройки интерпретатора Python отсутствует только вызов PySys_SetArgv. Я пытался подделать его, но это привело к той же ошибке!

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Если вы работаете в Linux, вам нужно добавить -Xlinker -export-dynamic в строку компилятора.Это сделает символы, определенные в исполняемом файле, доступными для модулей расширения.

На других платформах посмотрите, установлен ли LINKFORSHARED в make-файле Python, а затем используйте те же флаги.

1 голос
/ 30 апреля 2012

Используете ли вы 64-битный Python в Windows? В 64-битном Python26.Lib отсутствуют некоторые символы, доступные в 32-битном Python. Попробуйте 32-битный Python, и ваша проблема должна быть решена.

...