2013-06-04 60 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

從來沒有發生過這樣的事情給我。有效。謝謝 :) –

相關問題