Запустите универсальный двоичный файл OS X в 32-разрядном режиме

У меня есть сторонняя библиотека (интерфейс к инструментам конечного состояния Xerox), которые представляют собой универсальные двоичные файлы с двумя внутренними вариантами: PPC и вариант i386. У меня также есть интерфейс Python для библиотеки (которая использует ctypes).

Но когда я пытаюсь запустить пример кода, предоставляемого с интерфейсом Python, я получаю сообщение об ошибке, что библиотека неверна:

Ошибка импорта: dlopen(/Users/arne/sw/lib/libxcfsm.dylib, 10): подходящее изображение не найдено. Нашел:
/Users/arne/sw/lib/libxcfsm.dylib: Mach-O, но неправильная архитектура

Насколько я могу судить, это потому, что исполняемые файлы python имеют вариант x86_64 внутри, в дополнение к двум версиям в моей библиотеке, и предпочитают работать в этом режиме. Есть ли какой-нибудь способ заставить исполняемый файл python запускать версию i386, а не x86_64, только для некоторых сценариев?

2 ответа

Решение

Если вы используете системный питон apple (на снежном барсе), вы можете выполнить его с помощью

arch -i386 python

например:

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

запустить интерпретатор в 32-битном режиме. Существует также переменная окружения, которую вы можете установить для системного питона (VERSIONER_PYTHON_PREFER_32_BIT).

Если это ваш собственный собранный питон, в настоящее время есть ошибка с выбором арки, но если вы пересобираете с помощью pythonw.c из этого тикета, он работает нормально.

Если вы не используете системный Python, вы можете пойти дальше и добавить строку в ~/.bash_profile:

export VERSIONER_PYTHON_PREFER_32_BIT=yes
Другие вопросы по тегам