Как проверить, является ли библиотека 32-битной /64-битной, построенной на Mac OS X?

У меня возникли проблемы с использованием PyQt/SIP. Я предполагаю, что SIP скомпилирован в 64-битный, но у Python есть некоторые проблемы с его поиском.

  Файл "qtdemo.py", строка 46, в 
    импортный глоток
ImportError: dlopen(/Library/Python/2.6/site-packages/sip.so, 2): подходящее изображение не найдено. Нашел:
        /Library/Python/2.6/site-packages/sip.so: mach-o, но неправильная архитектура
  • Как я узнаю, является ли библиотека (so/dylib) 32-битной или 64-битной?
  • Как я узнаю, является ли мой Python 32-битным или 64-битным?

3 ответа

Решение

file Инструмент может быть использован для идентификации исполняемых файлов.

Пример:

> file /Applications/TextEdit.app/Contents/MacOS/TextEdit 
/Applications/TextEdit.app/Contents/MacOS/TextEdit: Mach-O universal binary with 2 architectures
/Applications/TextEdit.app/Contents/MacOS/TextEdit (for architecture x86_64):   Mach-O 64-bit executable x86_64
/Applications/TextEdit.app/Contents/MacOS/TextEdit (for architecture i386): Mach-O executable i386
lipo -info target/libexample-df07142d9bfd950a.a
input file target/libexample-df07142d9bfd950a.a is not a fat file
Non-fat file: target/libexample-df07142d9bfd950a.a is architecture: x86_64

или же

lipo -info `which python`
Non-fat file: /usr/local/bin/python is architecture: x86_64

Не использовать file,

Чтобы найти доступные архитектуры в используемом вами экземпляре Python:

$ file "$( "$(which python)" -c "import sys;print(sys.executable)" )"
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc

Чтобы узнать, работает ли Python в настоящее время 32-битным или 64-битным (10.6 примеров):

$ /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)"
7fffffffffffffff
$ arch -x86_64 /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)"
7fffffffffffffff
$ arch -i386 /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)"
7fffffff
$ arch -ppc /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)"
7fffffff

Для python3, заменить sys.maxsize за sys.maxint:

$ python3 -c "import sys;print('%x'%sys.maxsize)"
7fffffff
Другие вопросы по тегам