如何检查库是否是在Mac OS X上构建的32位/ 64位?

pro*_*eek 14 python macos 64-bit python-sip

我在使用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位?

Nik*_*uhe 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
Run Code Online (Sandbox Code Playgroud)


Ned*_*ily 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
Run Code Online (Sandbox Code Playgroud)

要查找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
Run Code Online (Sandbox Code Playgroud)

对于python3,替换sys.maxsizesys.maxint:

$ python3 -c "import sys;print('%x'%sys.maxsize)"
7fffffff
Run Code Online (Sandbox Code Playgroud)


Dou*_*oug 7

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
Run Code Online (Sandbox Code Playgroud)

要么

lipo -info `which python`
Non-fat file: /usr/local/bin/python is architecture: x86_64
Run Code Online (Sandbox Code Playgroud)

不要用file.

  • @chakrit `file` 不适用于所有库类型。它会猜测格式,所以你会看到:“libn.a: current ar archive random library”用于静态库,你会从“lipo”中看到:“Non-fat file: libn.a is architecture: x86_64'。对于某些文件类型它有效,但为什么使用使用一些“魔术测试”(参见 man 文件)*猜测*文件类型的工具,而不是 lipo,该工具明确存在于此目的? (2认同)