2010-07-08 3 views
11

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

 
    File "qtdemo.py", line 46, in 
    import sip 
ImportError: dlopen(/Library/Python/2.6/site-packages/sip.so, 2): no suitable image found. Did find: 
     /Library/Python/2.6/site-packages/sip.so: mach-o, but wrong architecture 
  • Как я знаю, если библиотека (так/dylib) является 32-битной или 64-битной?
  • Как узнать, является ли мой Python 32-битным или 64-битным?
+1

Возможный дубликат [Определить, является ли исполняемый файл (или библиотека) 32-или 64-разрядным (в OSX)] (http://stackoverflow.com/questions/1941825/determine-if-an-executable-or- library-is-32-or-64-bits-on-osx) – outis

ответ

16

Инструмент 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 
6

Чтобы найти доступные архитектуры в экземпляре 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 
5
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.

+0

«Не используйте' файл'. " Зачем? – chakrit

+1

@chakrit 'file' не работает со всеми типами библиотек. Он догадывается о форматах, поэтому вы увидите следующее: «libn.a: current ar archive random library» для статической библиотеки, где вы увидите это от 'lipo': 'Non-fat file: libn.a - это архитектура: x86_64. Для некоторых типов файлов это работает, но зачем использовать инструмент, который * угадывает * в файле, используя некоторые «магические тесты» (см. Man-файл), а не липо, инструмент, который явно существует для этой цели? – Doug

+0

благодарит за объяснение! – chakrit

Смежные вопросы