Answers:
另一个选择是lipo
;它的输出比otool
的简短且可读性强。
一个例子:
% lipo -info /usr/lib/libiodbc.a
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%
file
可能会告诉你。otool
当然应该能够。但是我会file
先尝试
logan:/Users/logan% file d2
d2: Mach-O executable ppc
存档示例:
logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386): current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc): current ar archive
file
经常失败。
如前所述,file
并非总是有效。otool -hv -arch all
可能是保证可以工作的最接近的东西-它提供了库中每个目标文件的体系结构信息。
例:
%otool -hv /sw/lib/libfftw3.a 存档:/sw/lib/libfftw3.a /sw/lib/libfftw3.a(align.o): 马赫头 魔术cputype cpusubtype caps filetype ncmds sizeofcmds标志 MH_MAGIC_64 X86_64 ALL 0x00对象3336 SUBSECTIONS_VIA_SYMBOLS /sw/lib/libfftw3.a(alloc.o): 马赫头 魔术cputype cpusubtype caps filetype ncmds sizeofcmds标志 MH_MAGIC_64 X86_64 ALL 0x00对象3416 SUBSECTIONS_VIA_SYMBOLS ...
作为替代,我发现objdump
可以很好地工作。举例来说,在我的环境中,我使用vxWorks构建了图书馆档案,需要将它们链接到其他项目中。要测试档案是否是正确的体系结构,我可以执行以下操作(bash语法):
if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;
这个示例并不完全正确,因为确实显示了一些没有说elf32-sparc-vxworks的行,但是很容易进行调整。
这样做的一个好处是,objdump
大多数* nix操作系统上都安装了或类似命名的变体,而其他响应中建议的工具则没有。
编辑它只是发生在我的任择议定书是问在OSX。我很抱歉。
objdump
您可以通过MacPorts安装GNU Binutils。要查看所有可用的体系结构,只需执行port search binutils
。为本机开发提供的工具带有前缀以避免冲突(例如gobjdump
代替objdump
)。为了方便起见,您可能需要创建一个别名。