在C语言中嵌入python,未定义符号:PyExc\u

在C语言中嵌入python,未定义符号:PyExc\u,python,c,importerror,python-embedding,Python,C,Importerror,Python Embedding,我正在尝试为大胆的媒体播放器编写一个加载python模块的插件。python嵌入代码来自python-2.6源代码(嵌入/演示)。这将与命令行一起编译 gcc-o demo.c-lpython2.6-lm-L/usr/lib/python2.6/config 我在CC参数中添加了-lpython2.6-lm-L/usr/lib/python2.6/config 它加载了一个Python脚本,该脚本导入pygtk和gtk模块,效果很好 但是在编译插件(一个共享库)之后,出现了以下错误(我发现这不是

我正在尝试为大胆的媒体播放器编写一个加载python模块的插件。python嵌入代码来自
python-2.6
源代码(嵌入/演示)。这将与命令行一起编译

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

我在CC参数中添加了
-lpython2.6-lm-L/usr/lib/python2.6/config

它加载了一个Python脚本,该脚本导入
pygtk
gtk
模块,效果很好

但是在编译插件(一个共享库)之后,出现了以下错误(我发现这不是gtk特有的,任何使用本机库的python模块都是一样的)

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/xyz.py”,第7行,在
进口gtk
文件“/usr/lib/pymodules/python2.6/gtk-2.0/gtk/_init__.py”,第30行,在
将gobject导入为_gobject
文件“/usr/lib/pymodules/python2.6/gtk-2.0/gobject/_init__.py”,第26行,在
从glib import spawn\u async、idle\u add、timeout\u add、timeout\u add\u seconds、\
文件“/usr/lib/pymodules/python2.6/gtk-2.0/glib/_init__.py”,第22行,在
来自glib.\u glib导入*
ImportError:/usr/lib/libpyglib-2.0-python2.6.so.0:未定义的符号:PyExc\u ImportError

用于设置python解释器的C代码只缺少
PySys\u SetArgv
调用。我试图伪造它,但它导致了同样的错误

假设您在Linux上,您需要将
-Xlinker-export dynamic
添加到编译器行。这将导致可执行文件中定义的符号可用于扩展模块


在其他平台上,查看Python makefile中是否设置了
LINKFORSHARED
,然后使用相同的标志。

是否在Windows上使用64位Python?64位python 26.Lib缺少一些在32位python中可用的符号。试试32位python,您的问题就会得到解决。

这是我正在使用的makefile。我试过了,但没有解决问题。谢谢你的回答@马杜拉:不要将该选项用于
歌曲更改。所以
。使用它链接
演示
 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