Después de "Hello World" de Cython y el ejemplo de invocar una función en las bibliotecas matemáticas C here, lo que realmente quiero hacer es tener un código C en un archivo aparte y usarlo desde Cython. Siguiendo this, modifico el archivo setup.py:Cython: función de llamada desde el archivo C externo
sourcefiles = ['hello2_caller.pyx', 'hello2.c']
Ésta es hello2.c (principal está ahí sólo para compilar y probar por separado --- sin embargo, que el producto no está presente para el examen:
#import <stdio.h>
void f() {
printf("%s", "Hello world!\n");
}
int main(int argc, const char* argv[]) {
f();
return 0;
}
Esta es hello2_caller.pyx
cdef extern from "hello2.c":
void f()
cpdef myf():
f()
me sale:
In file included from hello2_caller.c:219:
hello2.c:3: warning: function declaration isn’t a prototype
Así que supongo que no proporcionaré un encabezado de alguna manera ... aunque alimentar a setup.py un encabezado estándar como 'hello2.h' no funciona. ¿Puede señalarme un ejemplo de trabajo o explicar lo que estoy haciendo mal? Gracias.
¿Has intentado especificar el encabezado con 'cdef extern from" hello2..h ":'. AFAIK la línea 'extern' no debe referirse a un archivo C sino a un archivo de encabezado. –