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

时间:2016-07-09 22:31:29

标签: python cython

现在我正在尝试使用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构建的模块,它会抛出一个错误并且表示"符号my_func无法识别"。此外,当我查看由Cython编译器生成的html文件,您可以在其中查看为test.pyx生成的C代码时,my_func的C文件中的代码不存在,显示Cython一定无法找到my_func

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

2 个答案:

答案 0 :(得分:0)

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

请注意,它表示{。{1}}应该位于.pyx中,而cdef extern from "spam.c":位于.pxd中。在你的情况下,你把两者放在.pxd似乎是错误的。文档还声明函数必须是静态的。

答案 1 :(得分:0)

就像后续一样,我通过将temp.c编译成libtemp.so来解决这个问题,然后按照这里的指示将Cython与temp.h(这里的头文件)和libtemp.so链接:

Wrap C++ lib with Cython