Cython无法从外部C文件中找到C函数和对象



现在我正在尝试使用Cython将C函数加载到Python中,类似于这里描述的内容:http://docs.cython.org/src/userguide/external_C_code.html。假设我的 C 文件称为 temp.c,我的 pxd 文件称为 decl.pxd,我的 pyx 文件称为 test.pyx。假设我有一个名为 temp.c 的函数int my_func(int spam)

cdef extern from "temp.c":
 int my_func(int spam)
cdef int my_func(int spam)

然后我my_func导入test.pyx并尝试使用它:

from decl cimport my_func
my_func(1)

Cython 编译得很好,但是当我尝试使用 Python shell 导入从 test.pyx 构建的"test"模块时,它会抛出一个错误并说"符号my_func无法识别"。此外,当我查看由 Cython 编译器生成的 html 文件时,您可以在其中查看为 test.pyx 生成的 C 代码,my_func 的 C 文件中的代码不存在,这表明 Cython 一定找不到my_func

意识到我还没有详细介绍 temp.c 的样子,但是有没有办法调试为什么 Cython 显然无法找到my_func的源代码?

请参阅 http://docs.cython.org/src/userguide/external_C_code.html#implementing-functions-in-c

请注意,它说cdef extern from "spam.c":应该在 .pyx 中,cdef void order_spam(int tons)在 .pxd 中。在您的情况下,您将两者放在 .pxd 中,这似乎是错误的。文档还声明函数必须是静态的。

作为后续,我通过将 temp.c 编译为 libtemp.so 来解决这个问题,然后按照这里的说明将 Cython 与 temp.h(这里的头文件)链接并 libtemp.so:

用 Cython 包装C++库

相关内容

  • 没有找到相关文章

最新更新