使用Djapian/Xapian的Py_InitModule4
我正在尝试在RedHat5上安装Djapian,使用的是Python2.6。我之前在我的OSX 10.6机器上已经成功安装过了。
我已经顺利地为Py2.6构建和编译了Xapian和Djapian。然后我安装了Xapian的Python绑定,运行得很好。不过,当我打开Python解释器,输入'import xapian',或者在我的Django应用中尝试包含djapian时,就出现了以下错误:
/usr/lib64/python2.6/site-packages/_xapian.so: 未定义的符号: Py_InitModule4
在搜索的过程中,我发现这个问题不仅出现在Xapian上,还有几个模块也有类似的情况,但我似乎找不到好的解决办法。我已经安装了python-devel。
我猜这个问题可能出在Python这边,而不是Xapian。
1 个回答
4
在某些配置下(比如当定义了Py_DEBUG时),Py_InitModule4这个函数没有实现,这是因为宏重写的原因。这个情况是想告诉你,ABI(应用程序二进制接口)不兼容。我遇到过这个问题,当我尝试用调试版本的Python去运行一个发布版本的可执行文件时。确保你在所有目标上编译时使用相同的配置(调试版/发布版)。
以下是Python源代码中modsupport.h的内容(Py_TRACE_REFS在Py_DEBUG中被定义):
/* When we are tracing reference counts, rename Py_InitModule4 so
modules compiled with incompatible settings will generate a
link-time error. */