我在运行一个简单的例子时遇到了问题。
我正在使用它在 Cython 中声明一个来自 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()
签名?
最佳答案
您需要将包含 xsb_init_string
实现的库链接到 DLL。
如果您使用 distutils
编译 Cython 模块,您可以将选项传递给链接器以包含库。
关于Cython - 正确声明 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664600/