Cython - 正确声明 C 函数

标签 c cython

我在运行一个简单的例子时遇到了问题。

我正在使用它在 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/

相关文章:

c++ - 是否存在需要在内存中创建对象到某个地址的情况?

python - 如何使用 Cython 围绕 C 结构编写完整的 Python 包装器?

python - 在 Python(和 Cython)中计算两个矩阵的点积的最快方法是什么

c - 调用函数时出现 Invalid free()/delete/delete[]/realloc() 错误

C:如何区分字符串和整数?输出可以很好地打印整数,但不能打印字符串

c - 转义“在 system() 内部调用以用于 echo 命令

c++ - 在 Cython 中使用 C++ 复杂函数

python - Cython:python 类包装器中的模板

python - 非常慢的 Numpy 缓冲区指针访问

c - 尽管未设置 AI_PASSIVE,Getaddrinfo() 返回通配符地址