c-如何查看静态库文件的编译平台



我有一个静态库文件。我怎么看它是在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

我相信有一种方法可以直接签入这些文件,但这也同样有效!

使用fileobjdumpfile始终有效,但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

最新更新