2013-06-04 33 views
5

otrzymuję ten sam błąd z tych dwóch pytań: ImportError: dynamic module does not define init function, but it does i Cython compiled C extension: ImportError: dynamic module does not define init functionCo to jest funkcja init modułu dynamicznego w python?

Ale rozwiązania nie są równe, a nie działa dla mnie.

Próbuję wywołać funkcje współużytkowanej biblioteki, które napisałem wc, wewnątrz mojego programu Pythona.

Skompilowałem mojego udostępnionego lib tak:

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

stworzyłem moduł, a wewnątrz tego modułu I załadować ten lib z:

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

Ale kiedy uruchomić kod, otrzymuję następujący błąd:

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

Co jest bardzo dziwne, ponieważ jeśli uruchomię interpreteer python i wywołać dir ectly:

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

Mam dostęp do funkcji mojej udostępnionej biblioteki.

Wszelkie pomysły na rozwiązanie tego problemu? Dziękuję.

Odpowiedz

2

wykreślenie

import playfaircrack 

w playfair.py i powinno działać.

Alternatywnie, zmień nazwę na playfaircrack.so na inną lub przenieś do innego katalogu. Python jest zdezorientowany, jeśli masz dwa pliki o tej samej nazwie modułu, tj. playfaircrack.py i playfaircrack.so w tym samym katalogu. Python próbuje zaimportować playfaircrack.so, który nie jest prawidłowym modułem Pythona, zanim dotrze do playfaircrack.py.

+0

Dobrze. Po prostu nie mogę tego zrobić, ponieważ playfair to główny program, a playfaircrack to moduł wywoływany z głównego programu. –

+0

Zaktualizowano odpowiedź. Dwa moduły o tej samej nazwie nie działają. –

+0

Nigdy nie zdarzyło mi się coś takiego. Zadziałało. Dziękuję Ci :) –