我有一个静态库文件。我怎么看它是在i386中编译的还是在arm平台中编译的。谢谢
objdump
是您的朋友;)
$ objdump -f lib/lib.a
在Unix(以及类似的系统,如Linux或Minix)中,您可以使用"文件"实用程序:
%file /lib/libc.so.7
libc.so.7: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dynamically linked, stripped
(%
表示shell提示,不属于命令的一部分)
至于Windows,我不知道是否已经存在内置命令,但如果没有,你可以在这个页面上找到该实用程序:http://gnuwin32.sourceforge.net/packages.html(file
包位于页面下方约1/3处)。
编辑:对于静态库(.a
文件),您首先需要提取它们并检查.o
文件:
%cp /usr/lib/libchipmunk.a .
%ar -x libchipmunk.a
%file *.o
chipmunk.c.o: ELF 64-bit LSB relocatable, x86-64, version 1 (FreeBSD), not stripped
<snip>
警告:ar -x ...
会污染本地目录,所以请确保先将文件复制到其他地方(比如/tmp/something
)
我相信有一种方法可以直接签入这些文件,但这也同样有效!
使用file
或objdump
。file
始终有效,但objdump
将为您提供有关库、档案和可执行文件的更详细信息。
file
为您提供了有关linux平台的一般信息。
例如
file /usr/lib/libfoo.a
或可执行二进制
file `which foo`
对于链接到iOS应用程序的库,以下是如何查看.a文件的体系结构:
file /path/to/library.a
为armv7、armv7s(iPhone 5)、arm64、x86_64和i386:构建的lib的示例输出
/path/to/library.a: Mach-O universal binary with 5 architectures: [i386:Mach-O object i386] [x86_64:Mach-O 64-bit object x86_64] [arm_v7:Mach-O object arm_v7] [arm_v7s:Mach-O object arm_v7s] [arm64]
/path/to/library.a (for architecture i386): Mach-O object i386
/path/to/library.a (for architecture x86_64): Mach-O 64-bit object x86_64
/path/to/library.a (for architecture armv7): Mach-O object arm_v7
/path/to/library.a (for architecture armv7s): Mach-O object arm_v7s
/path/to/library.a (for architecture arm64): Mach-O 64-bit object arm64