我在运行一个简单的例子时遇到了麻烦。
我正在使用它在来自cinterf.h
header:
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'
我是否正确地在cdef中声明了xsb_init_string()
签名?
答案 0 :(得分:2)
您需要将包含xsb_init_string
实现的库链接到DLL。
如果您使用distutils
编译Cython模块,则可以将选项传递给链接器以包含库。