Estoy caminando por la documentación de Cython y construyendo cada una de las aplicaciones de ejemplo. Estoy un poco atrapado en el uso de Bibliotecas C Después de crear con éxito el archivo .so e intentar importarlo en un archivo python denominado test.py, se produce el siguiente error.¿Cuál es el significado de este ImportError al importar un archivo .so generado por Cython?
$ python3.2 test.py
Traceback (most recent call last):
File "test.py", line 12, in <module>
from queue import Queue
ImportError: dlopen(/Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so, 2): Symbol not found: _queue_free
Referenced from: /Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so
Expected in: flat namespace
in /Users/jeremy/Development/labs/python/cython_lib_wrapper/queue.so
El archivo .so se encuentra justo al lado del archivo test.py. Por lo tanto, parece que debería ser encontrado. Esto está ejecutando la última versión de Cython, con Python 3.2 en un OSX 10.6.
¿Algún conocimiento? salida añadiendo "nm" -
Editar - la adición de construir el mando y la salida
$ python3.2 setup.py build_ext --inplace
running build_ext
cythoning queue.pyx to queue.c
building 'queue' extension
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3 -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -I/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2m -c queue.c -o build/temp.macosx-10.6-intel-3.2/queue.o
queue.c: In function ‘__pyx_f_5queue_5Queue_append’:
queue.c:627: warning: cast to pointer from integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_extend’:
queue.c:740: warning: cast to pointer from integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_peek’:
queue.c:813: warning: cast from pointer to integer of different size
queue.c: In function ‘__pyx_f_5queue_5Queue_pop’:
queue.c:965: warning: cast from pointer to integer of different size
gcc-4.2 -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -isysroot /Developer/SDKs/MacOSX10.6.sdk -g build/temp.macosx-10.6-intel-3.2/queue.o -o
Edición 2 - añadiendo "otool" cmd solicitó en el comentario
queue.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
Datos 3
U ___stack_chk_fail
U ___stack_chk_guard
U _queue_free
U _queue_is_empty
U _queue_new
U _queue_peek_head
U _queue_pop_head
U _queue_push_tail
U dyld_stub_binder
salidas cmd grep esto:
(undefined) external _queue_free (dynamically looked up)
Esto parece un problema de enlace. ¿Podría reconstruir e incluir tanto la salida de compilación como el comando utilizado para compilar aquí? – stderr
@Mike Steder Gracias por mirar esto, he agregado el comando de compilación y salida – JeremyFromEarth
Bien, no teniendo mucha suerte de reproducir, así que intentemos un poco más de depuración. Pruebe 'nm queue.so' y vea lo que aparece al lado de _queue_free. También use 'otool -L queue.so' y verifique para ver DYLD_LIBRARY_PATH (' echo $ DYLD_LIBRARY_PATH'). – stderr