现在我正在尝试使用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
的源代码?
答案 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链接: