SWIG和Python3导入错误
我写了一个用C语言编写的库。我使用SWIG来为Java、Python等语言生成接口。我成功为这两种语言写了自定义的类型映射,还成功地使用我的库(一个自定义协议)与我用C写的服务器进行通信,同时也能与我用Java和正在用Python写的客户端进行交流。
最近,我遇到了一个多重继承的问题,找到了一种我觉得很聪明的解决方案。但是,当我尝试用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生成的包装代码与应用程序的其余部分链接起来。
老实说,我觉得这些可能的原因不适用于我的模块,因为这应该是Python 2.7和3版本都会出现的错误,而不仅仅是Python 3。
我会很感激任何建议,但考虑到SWIG似乎是一个过时的项目,我可能会继续使用Python 2.7和提到的“黑科技”。
祝好,