8

在 Cython 的“Hello World”和在此处调用 C 数学库中的函数的示例之后,我真正想做的是将我自己的 C 代码放在一个单独的文件中并从 Cython 使用它。在之后,我修改 setup.py 文件:

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

这是 hello2.c (main 只是为了单独编译和测试它——尽管该产品不存在于测试中:

#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”这样的标准标头是行不通的。您能否指出一个可行的示例或解释我做错了什么。谢谢。

4

1 回答 1

8

感谢来自 Cython 用户列表的帮助
我的文章在这里

底线:这只是一个警告,并没有通过 f() 的声明来修复,但编译后的 .so 有效。我仍然不确定您将如何向 Cython 提供 .h 文件,或者是否有更好的方法来做到这一点。

并且有几个错误:应该是#include,并且不要在源文件中列出.c 文件。

于 2010-12-23T21:45:16.420 回答