【问题标题】:How to see the compilation platform of a static library file如何查看静态库文件的编译平台
【发布时间】:2012-03-04 21:07:23
【问题描述】:

我有一个静态库文件。如何查看它是在i386还是在arm平台编译的。谢谢。

【问题讨论】:

  • 看看我的回答——很多人都不知道(尽管作为程序员的你可能知道)Mac OS X 是一个成熟的 Unix 系统 :)

标签: c macos unix


【解决方案1】:

objdump 是你的朋友 ;)

$ objdump -f lib/lib.a

【讨论】:

  • 谢谢 :-D 只是复制文件,然后存档,最后使用file
  • objdump 更好,因为文件的输出可能有点受限。
【解决方案2】:

在 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.htmlfile 包约为 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 命令没有为静态库(.a 文件)提供那么多信息。
【解决方案3】:

使用fileobjdumpfile 始终有效,但 objdump 将为您提供有关库、档案和可执行文件的更详细信息。

【讨论】:

    【解决方案4】:

    file 为您提供有关 linux 平台的一般信息。

    例如

    file /usr/lib/libfoo.a
    

    或者对于一个可执行的二进制文件

    file `which foo`
    

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      相关资源
      最近更新 更多