【发布时间】:2011-07-27 14:11:34
【问题描述】:
我用 C 编写了一个库。我使用 SWIG 为 Java、Python 等生成绑定。我设法为这两种语言等编写了自定义类型映射。我还设法使用我的库(一个自定义协议)并与我用 C 编写的服务器、我用 Java 编写的客户端以及我用 Python 编写的客户端进行通信。
最近,我遇到了一个solution 的多重继承问题,我发现它很聪明。但是,当尝试使用 Python 3 复制错误时,错误消失了(也许在版本 3 中已解决)。事实是,相同的代码、相同的项目和相同的源代码不会运行调用python3 二进制文件,但它可以调用 python2.7 二进制文件。
我收到消息:
ImportError: dynamic module does not define init function (PyInit__pytellapic)
我已经从 SWIG 文档中阅读了可能的含义,但错误略有不同:
import example
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: dynamic module does not define init function (init_example)
这么说:
这个错误几乎总是由一个错误的名字引起的 共享对象文件。例如,如果您创建了一个文件 example.so 而不是 _example.so 你会得到这个错误。或者,这 如果模块的名称与 与 %module 指令一起提供的模块名称。仔细检查 接口以确保模块名称和共享对象文件名 匹配。此错误的另一个可能原因是忘记链接 SWIG 生成的包装器代码以及应用程序的其余部分 创建扩展模块。
老实说,我认为这个可能的原因不适用于我的模块,因为它应该是 2.7 和 3 版本的 python 的错误,而不仅仅是 Python 3。
如果有任何建议,我将不胜感激,但考虑到 SWIG 似乎是一个过时的项目,我可能会继续使用带有上述“hack”的 Python 2.7。
最好的问候,
【问题讨论】:
标签: python python-3.x swig