6

我得到了与其他两个问题相同的错误: ImportError: dynamic module does not define init function, but it does and Cythoncompiled C extension: ImportError: dynamic module does not define init function

但是他们的解决方案并不相同,对我也不起作用。

我正在尝试在我的 python 程序中调用我用 c 编写的共享库的函数。

我像这样编译了我的共享库:

gcc -shared -Wl,-soname,playfaircrack.so -o playfaircrack.so -fPIC playfaircrack.c scoreText.o

我创建了一个模块,在这个模块中我加载了这个库:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so')

但是当我运行代码时,我收到以下错误:

Traceback (most recent call last):
  File "playfair.py", line 2, in <module>
    import playfaircrack
ImportError: dynamic module does not define init function (initplayfaircrack)

这很奇怪,因为如果我运行 python 解释器并直接调用:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so')

我可以访问我的共享库的功能。

任何想法如何解决这个问题?谢谢你。

4

1 回答 1

3

删除行

import playfaircrack

playfair.py它应该工作。

或者,重命名playfaircrack.so为其他名称或将其移动到不同的目录。如果您有两个具有相同模块名称的文件,即 位于同一目录中playfaircrack.py, Python 会感到困惑。playfaircrack.soPython 尝试在 importplayfaircrack.so之前导入不是有效的 Python 模块playfaircrack.py

于 2013-06-04T02:21:11.700 回答