2009-10-31 9 views
7

Tengo una biblioteca de terceros (la interfaz de las herramientas de estado finito de Xerox) que vienen como binarios universales con dos variantes internas: un PPC y una variante i386. También tengo una interfaz de Python para la biblioteca (que usa ctypes).Ejecutar un binario universal de OS X en modo de 32 bits

Pero cuando trato de ejecutar el código de ejemplo proporcionado con la interfaz de Python consigo un error quejarse de la biblioteca siendo una arquitectura incorrecta:

ImportError: dlopen(/Users/arne/sw/lib/libxcfsm.dylib, 10): no suitable image found. Did find:
/Users/arne/sw/lib/libxcfsm.dylib: mach-o, but wrong architecture

De lo que he entendido, esto se debe a que los ejecutables de Python tener una variante x86_64 internamente además de las dos versiones en mi biblioteca, y prefiero correr en ese modo. ¿Hay alguna forma de obligar al ejecutable de Python a iniciar la versión i386 en lugar del x86_64, solo para algunos scripts?

Respuesta

17

Si está utilizando el sistema de pitón de manzana (en leopardo de nieve) se puede ejecutar con

arch -i386 python 

por ejemplo:

robin-mbp:~ $ arch -i386 /usr/bin/python2.6 -c "import sys; print sys.maxint" 
2147483647 

para iniciar el intérprete en modo de 32 bits. También hay una variable de entorno que puede establecer para el sistema python (VERSIONER_PYTHON_PREFER_32_BIT).

Si se trata de su propia pitón construida, actualmente existe un error con la selección de arco, pero si reconstruye con pythonw.c desde this ticket, funciona bien.

+0

que lo hizo. ¡Muchas gracias! – arnsholt

3

Si no está utilizando el sistema de pitón, puede seguir adelante y añadir una línea a su ~/.bash_profile:

export VERSIONER_PYTHON_PREFER_32_BIT=yes 
Cuestiones relacionadas