如何检查Mac OS X上的库是32位还是64位构建?
我在使用PyQt/SIP的时候遇到了一些麻烦。我觉得SIP是编译成64位的,但Python在找到它的时候有点问题。
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
- 我怎么知道一个库(so/dylib)是32位还是64位?
- 我怎么知道我的Python是32位还是64位?
3 个回答
7
要查看你正在使用的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.maxint
替换成 sys.maxsize
:
$ python3 -c "import sys;print('%x'%sys.maxsize)"
7fffffff
8
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
。
17
可以使用 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