2013-06-04 35 views
5

我收到了同样的错误,这些其他两个问题: ImportError: dynamic module does not define init function, but it doesCython compiled C extension: ImportError: dynamic module does not define init functionpython中动态模块的初始化函数是什么?

但他们的解决方案是不相等的,对我来说并没有正常工作。

我想调用一个共享库的函数,我在我的python程序里面写了c语言。

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

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

我创建了一个模块,这个模块里面我加载此lib中有:

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解释器,并调用dir如下:

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

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

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

回答

2

删除线

import playfaircrack 
playfair.py

,它应该工作。

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

+0

好吧。我不能这么做,因为playfair是主程序,playfaircrack是从主程序调用的模块。 –

+0

更新了答案。两个同名的模块不工作。 –

+0

从来没有发生过这样的事情给我。有效。谢谢 :) –

相关问题