使用Djapian/Xapian的Py_InitModule4

2 投票
1 回答
3164 浏览
提问于 2025-04-16 11:35

我正在尝试在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. */

撰写回答