2010-12-12 27 views
11

Estoy tratando de compilar python código fuente foo.py a C usando cython.Compilando Python a C usando Cython

En foo.py:

print "Hello World" 

El comando que estoy corriendo es cython foo.py.

El problema es que cuando se compila utilizando foo.c gcc, me sale el error:

undefined reference to 'main'.

Respuesta

19

al convertir el código de python a c (usando Cython) lo convierte en código c que se puede compilar en un objeto compartido. para que sea ejecutable, debe agregar "--embed" al comando de conversión cython. esta bandera agrega la función 'principal' que necesita, por lo que puede compilar el código c en un archivo ejecutable. , tenga en cuenta que necesitará las bibliotecas en tiempo de ejecución de python .so para ejecutar el ejecutor.

11

Lea la documentación de Cython. Esto también (con suerte) le enseñará qué es Cython y qué no es. Cython es para crear extensiones de Python (no un compilador Python-to-C de propósito general), que son objetos/dlls compartidos. Las bibliotecas cargadas dinámicamente no tienen una función main como programas independientes, pero los compiladores suponen que finalmente están vinculando un ejecutable. Tienes que decirles lo contrario a través de flags (-shared), o mejor aún, no compilar, usa un setup.py para esto (una vez más, lee la documentación de Cython).

+0

+1 para la explicación – user225312

+2

para mí esta respuesta resultó en la compilación de una extensión en funcionamiento. La respuesta de RoeeK resolvió el problema de enlace, pero después de que Python no pudo importar con el error 'ImportError: el módulo dinámico no define la función init'. Muchas gracias, creo que sería mejor escribirlo con un estilo menos magistral sin asumir la estupidez que sugiere el 3 rtfm. – deeenes

0

La forma habitual es utilizar distutils para compilar el archivo generado por cython. Esto también le brinda todos los directorios de inclusión que necesita de manera portátil.

Cuestiones relacionadas