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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top