2013-06-04 6 views
5

sto ottenendo lo stesso errore di queste altre due domande: ImportError: dynamic module does not define init function, but it does e Cython compiled C extension: ImportError: dynamic module does not define init functionQual è la funzione init di un modulo dinamico in python?

Ma le loro soluzioni non sono uguali, e non ha funzionato per me.

Sto provando a chiamare le funzioni di una libreria condivisa che ho scritto in c, all'interno del mio programma python.

Ho compilato la mia lib condivisa in questo modo:

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

ho creato un modulo, e all'interno di questo modulo che carico questo lib con:

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

Ma quando si esegue il codice, ottengo il seguente errore:

Che è molto strano, perché se eseguo l'interprete python e chiamo dir ectly:

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

Posso accedere alle funzioni della mia lib condivisa.

Qualche idea su come risolvere questo problema? Grazie.

risposta

2

cancellare la linea

import playfaircrack 

in playfair.py e dovrebbe funzionare.

In alternativa, rinominare playfaircrack.so in un'altra posizione o spostarlo in un'altra directory. Python viene confuso se si hanno due file con lo stesso nome di modulo, ad esempio playfaircrack.py e playfaircrack.so nella stessa directory. Python tenta di importare playfaircrack.so, che non è un modulo Python valido, prima che arrivi a playfaircrack.py.

+0

Bene. Non posso farlo perché playfair è il programma principale, e playfaircrack è un modulo chiamato dal programma principale. –

+0

Aggiornamento della risposta. Due moduli con lo stesso nome non funzionano. –

+0

Non mi è mai successo qualcosa del genere. Ha funzionato. Grazie :) –