2009-10-31 5 views
7

J'ai une bibliothèque tierce (l'interface des outils Finite State de Xerox) qui se présente sous la forme de binaires universels avec deux variantes internes: un PPC et un i386. J'ai aussi une interface Python à la bibliothèque (qui utilise des ctypes).Exécution d'un binaire universel OS X en mode 32 bits

Mais lorsque je tente d'exécuter le code exemple fourni avec l'interface Python je reçois une erreur se plaindre de la bibliothèque étant la mauvaise architecture:

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 ce que je comprends, c'est parce que les executables python J'ai une variante x86_64 en interne en plus des deux versions de ma bibliothèque et je préfère utiliser ce mode. Y at-il un moyen pour moi de forcer l'exécutable python à démarrer la version i386 plutôt que la version x86_64, pour seulement quelques scripts?

Répondre

17

Si vous utilisez le python système de pomme (sur le léopard des neiges), vous pouvez l'exécuter avec

arch -i386 python 

par exemple:

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

pour démarrer l'interpréteur en mode 32 bits. Il existe également une variable d'environnement que vous pouvez définir pour le système python (VERSIONER_PYTHON_PREFER_32_BIT).

Si c'est votre propre python construit il y a actuellement un bug avec la sélection de l'arc, mais si vous reconstruisez avec le pythonw.c de this ticket cela fonctionne très bien.

+0

qui l'a fait. Merci beaucoup! – arnsholt

3

Si vous n'utilisez pas le python système, vous pouvez aller de l'avant et ajouter une ligne à votre ~/.bash_profile:

export VERSIONER_PYTHON_PREFER_32_BIT=yes 
Questions connexes