Ahora que instalé Cython con éxito en Windows 7, intento compilar algún código de Cython usando Cython, pero gcc me complica la vida.
cdef void say_hello(name):
print "Hello %s" % name
El uso de gcc para compilar el código arroja docenas de referencia indefinida a -errores, y estoy bastante seguro de que el libpython.a
está disponible (como decía el tutorial de instalación, referencia indefinida a -se lanzan errores si falta este archivo).
$ cython ctest.pyx
$ gcc ctest.c -I"C:\Python27\include"
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1038): undefined reference to `_imp__PyString_FromStringAndSize'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1075): undefined reference to `_imp___Py_TrueStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1086): undefined reference to `_imp___Py_ZeroStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1099): undefined reference to `_imp___Py_NoneStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x10b8): undefined reference to `_imp__PyObject_IsTrue'
c:/program files/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
Lo raro es que usando pyximport
* o un setup
-script funciona bastante bien, pero no es muy útil cuando todavía se trabaja en un módulo.
Cómo compilar esos .c
archivos generados con Cython usando gcc?
o cualquier otro compilador, ¡lo importante es que funcione!
*pyximport
: ¿Es normal que solo las funciones y clases nativas de Python estén contenidas en el módulo importado y no las funciones y clases de cdef? me gusta:
# filename: cython_test.pyx
cdef c_foo():
print "c_foo !"
def foo():
print "foo !"
c_foo()
import pyximport as p; p.install()
import cython_test
cython_test.foo()
# foo !\nc_foo !
cython_test.c_foo()
# AttributeError, module object has no attribute c_foo
ACTUALIZAR
Vocación $ gcc ctest.c "C:\Python27\libs\libpython27.a"
mata al referencia indefinida a -errores, pero este:
c:/program files/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `WinMain@16'
La “referencia indefinida a `WinMain@16′” significa que el gcc está buscando (sin suerte) el punto de entrada “principal”. Consulte, por ejemplo, stackoverflow.com/questions/5259714/…
– Francisco
8 de agosto de 2011 a las 19:05