Cython: funzione di chiamata da file C esterni
-
12-10-2019 - |
Domanda
Dopo "Ciao Mondo" di Cython e l'esempio di chiamare una funzione nelle librerie C matematiche qui , quello che voglio fare è quello di avere il codice C del mio lavoro in un file separato e utilizzarlo da Cython. A seguito di questo , ho modificare il file setup.py :
sourcefiles = ['hello2_caller.pyx', 'hello2.c']
Questa è hello2.c (principale è proprio lì per compilare e testare separatamente --- anche se il prodotto non è presente per il test:
#import <stdio.h>
void f() {
printf("%s", "Hello world!\n");
}
int main(int argc, const char* argv[]) {
f();
return 0;
}
Questa è hello2_caller.pyx
cdef extern from "hello2.c":
void f()
cpdef myf():
f()
I ottenere:
In file included from hello2_caller.c:219:
hello2.c:3: warning: function declaration isn’t a prototype
Quindi credo che sto riuscendo a fornire un colpo di testa in qualche modo .. se solo alimentando setup.py un'intestazione standard come 'hello2.h' non funziona. Mi può indicare un esempio di lavoro o di spiegare che cosa sto facendo male. Grazie.
Soluzione
Grazie all'aiuto di elenco degli utenti Cython qui .
Il mio writeup qui .
In conclusione: questo è solo un avvertimento, che non viene risolto da una dichiarazione di f (), ma l'compilato .so opere. Non sono ancora sicuro di come si dovrebbero fornire un file .h per Cython o se c'è un modo migliore per farlo.
E ci sono un paio di errori:. Dovrebbe essere # include, e non è possibile indicare il file .c in sourcfiles