2010-12-23 10 views
7

Cython'un "Merhaba Dünyası" ve C matematik kitaplıkları here'da bir işlev çağırma örneğinden sonra, gerçekten yapmak istediğim ayrı bir dosyada kendi C kodunun olması Cython'dan kullan.Cython: harici C dosyasından arama işlevi

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

Bu hello2.c (ana o ürün testi için mevcut olmasa --- derlemek ve ayrı ayrı test etmek sadece orada olduğunu:

this ardından, setup.py dosyasını değiştirmek
#import <stdio.h> 

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

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

Bu alıyorum hello2_caller.pyx

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

cpdef myf(): 
    f() 

geçerli:

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

Sanırım bir şekilde bir başlık vermeyi başaramadım .. sadece setup.py 'hello2.h' gibi bir standart başlık beslemesi çalışmıyor. Beni çalışma örneğine veya yanlış yaptığımı açıklayabilir misin? Teşekkürler.

+0

Başlığı "hello2..h": 'dan cdef extern ile belirtmeyi denediniz. AFAIK 'extern' satırı, bir C dosyasına değil, bir başlık dosyasına başvurmalıdır. –

cevap

4

Cython kullanıcılarının listesi here'un yardımları sayesinde.
Kayıt defterim here.

Alt satır: Bu, yalnızca bir f() bildirimi ile düzeltilmemiş, ancak derlenmiş bir uyarıdır. Cython'a bir .h dosyası nasıl sağlayacağınızdan ya da bunu yapmanın daha iyi bir yolu olup olmadığından emin değilim.

Ve bir çift hata var: #include olmalı ve .c dosyasını sourcfiles içinde listelemeyin.