2010-12-23 74 views
7

功能用Cython的「Hello World」的經過,並呼籲在C數學庫here函數的例子,我真正想要做的是有我自己的C代碼在一個單獨的文件從Cython使用它。繼this,我修改setup.py文件:用Cython:調用外部C文件

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'不起作用。你能指點我一個有效的例子,或者解釋我做錯了什麼。謝謝。

+0

你是否嘗試用`hello2..h「的`cdef extern指定頭部:`。 AFAIK'extern`行不應該引用C文件,而是引用頭文件。 – 2014-12-14 17:20:50

回答

4

由於從用Cython用戶名單here幫助。
我的寫作here

底線:這只是一個警告,不是由f的聲明()固定的,但編譯的.so作品。我仍然不確定如何爲Cython提供.h文件,或者是否有更好的方法來執行此操作。

而且有一對夫婦的錯誤:應該是的#include,並沒有列出.c文件中sourcfiles。