Cython - правильное объявление C funs

У меня проблемы с запуском голого примера.

Я использую это, чтобы объявить функцию в Cython из заголовка cinterf.h:

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

Объявление в заголовочном файле C:

DllExport extern int call_conv xsb_init_string(char *);

и DllExport, и call_conv являются макросами, определенными в другом месте, и разрешаются в директивы компилятора GCC.
Должен ли я использовать их также внутри cdef, чтобы полностью соответствовать объявлению?

Когда я вызываю xsb_init_string() как:

xsb_init_string('some string')

Интерпретатор Python дает мне:

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

Правильно ли я объявляю подпись xsb_init_string() внутри cdef?


person deepblue    schedule 12.01.2011    source источник


Ответы (1)


Вам необходимо связать с DLL библиотеку, содержащую реализацию xsb_init_string.

Если вы используете distutils для компиляции модуля Cython, вы можете передать параметры компоновщику для включения библиотек.

person Giuseppe Ottaviano    schedule 12.01.2011
comment
У меня было ощущение, что это может быть так. Я попробую. благодарю вас - person deepblue; 12.01.2011