Cython:从外部C文件调用函数

时间:2010-12-23 13:42:48

标签: cython

在Cython的“Hello World”以及在C数学库here中调用函数的示例之后,我真正想做的是在单独的文件中使用我自己的C代码并在Cython中使用它。在this之后,我修改了setup.py文件:

sourcefiles = ['hello2_caller.pyx', 'hello2.c']

这是hello2.c(主要是单独编译和测试它 - 虽然该测试不存在该产品:

#import <stdio.h>

void f() {
    printf("%s", "Hello world!\n");
}

int main(int argc, const char* argv[]) {
    f();
    return 0;
}

这是hello2_caller.pyx

cdef extern from "hello2.c":
    void f()

cpdef myf():
    f()

我明白了:

In file included from hello2_caller.c:219:
hello2.c:3: warning: function declaration isn’t a prototype

所以我想我没有以某种方式提供标题..虽然只是提供setup.py标准标题如'hello2.h'不起作用。你能指点我一个工作的例子或解释我做错了什么。感谢。

1 个答案:

答案 0 :(得分:5)

感谢Cython用户列表here的帮助 我的写作here

底线:这只是一个警告,不是由f()声明修复的,但编译后的.so有效。我仍然不确定如何向Cython提供.h文件,或者是否有更好的方法来执行此操作。

还有一些错误:应该是#include,并且不要在sourcfiles中列出.c文件。