2011-01-12 12 views
2

Ich habe Probleme mit dem Ausführen eines nackten Beispiels.Cython - richtig C-Spaß zu erklären

ich dies mit einer Funktion in Cython von cinterf.h Kopf kommt zu erklären:

cdef extern from 'cinterf.h': 
int xsb_init_string(char* p_xsb_path) 

Die Deklaration in der Datei C-Header ist:

DllExport extern int call_conv xsb_init_string(char *); 

beiden Dllexport und call_conv sind Makros definiert woanders, und zu GCC-Compiler-Direktiven auflösen.
Muss ich diese auch innerhalb von cdef verwenden, um die Deklaration vollständig anzupassen?

Wenn ich rufe xsb_init_string() als:

xsb_init_string('some string') 

Der Python-Interpreter gibt mir:

'ImportError: ./py_ext.so: undefined symbol: xsb_init_string' 

Bin erklärte ich die xsb_init_string() Unterschrift richtig, innerhalb cdef?

Antwort

2

Sie müssen mit der DLL die Bibliothek verknüpfen, die die Implementierung xsb_init_string enthält.

Wenn Sie distutils verwenden, um das Cython-Modul zu kompilieren, können Sie Optionen an den Linker übergeben, um Bibliotheken einzubeziehen.

+0

Ich hatte das Gefühl, dass es das sein könnte. Ich versuche es mal. danke – deepblue

+0

ya, das ist es. vielen Dank – deepblue