首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"otool“和" file”不能显示".a“文件的体系结构

"otool“和" file”不能显示".a“文件的体系结构
EN

Stack Overflow用户
提问于 2013-07-04 10:55:19
回答 2查看 4.9K关注 0票数 7

我用ARM7为cMake构建了一些静态库。通常,当您对.a文件使用next命令时,它将显示体系结构:

f.e.

代码语言:javascript
复制
mac:libs User$ file ./libcurl.a 
./libcurl.a: Mach-O universal binary with 3 architectures
./libcurl.a (for architecture armv6):   current ar archive random library
./libcurl.a (for architecture armv7):   current ar archive random library
./libcurl.a (for architecture i386):    current ar archive random library

或者f.e。

代码语言:javascript
复制
mac:libs User$ otool -vf ./libboost_regex.a 
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture armv6
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V6
    capabilities 0x0
    offset 68
    size 9550024
    align 2^2 (4)
architecture armv7
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7
    capabilities 0x0
    offset 9550092
    size 9390544
    align 2^2 (4)
architecture i386
    cputype CPU_TYPE_I386
    cpusubtype CPU_SUBTYPE_I386_ALL
    capabilities 0x0
    offset 18940636
    size 9595040
    align 2^2 (4)

但是现在,当我构建我的图书馆时,"otool“和"file”无法显示它的体系结构。

代码语言:javascript
复制
mac:libs User$ otool -vf ./mylib_meta.a 
Archive : ./mylib_meta.a

什么意思?我在建图书馆的时候能犯什么错误?

更新:伊戈尔,谢谢!

我使用命令解压缩了对象文件:

ar -t mylib.a

-xv mylib.a myobj.o

-t显示二进制文件的列表。

-xv提取具体的二进制文件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-04 11:43:33

苹果使用两种形式的AR档案。第一个文件非常类似于传统的Unix存档("a.out归档“)--基本上只是一堆.o文件与前面的符号索引粘在一起:

代码语言:javascript
复制
"<!arch>\n"

header 0
SYMDEF entry

header 1
object 1

header 2
object 2

...

要确定此存档所针对的体系结构,需要至少提取一个对象文件并在其上使用fileotool。存档头本身不具有此信息。(实际上,对象文件不一定都是同一个拱,理论上您可能有任何类型的文件,不仅仅是对象,但这是不可能的。)您可以使用 utility从存档中提取单个文件。

另一种是苹果自己的发明。他们采取了“脂肪二进制/通用二进制”的概念,用于多拱马赫-O可执行文件,并使用它作为档案。因此,“胖”档案如下所示:

代码语言:javascript
复制
  Fat Mach-O header
  Architecture 1 header --+
  Architecture 2 header --|--+
  Architecture 3 header --|--|--+
  [padding]               |  |  |
  Archive 1 <-------------+  |  |
  Archive 2 <----------------+  |
  Archive 3 <-------------------+

在本例中,fileotool可以查看胖标头和支持哪些体系结构的列表。

要创建或编辑fat文件(档案和可执行文件),可以使用 tool

票数 7
EN

Stack Overflow用户

发布于 2019-01-13 21:53:16

另一种选择是使用alternative包中的objdump (例如,通过自制)。在macOS上,它被重新命名为gobjdump。在归档文件上调用它将显示存档头信息,也许可以省去提取对象文件的麻烦(就像您最初想要的那样)。

代码语言:javascript
复制
> gobjdump -a ./libboost_regex.a
In archive ./libboost_regex.a:
c_regex_traits.o:     file format mach-o-x86-64
rw-r--r-- 502/20 140976 Nov  8 08:03 2018 c_regex_traits.o
cpp_regex_traits.o:     file format mach-o-x86-64
rw-r--r-- 502/20 106424 Nov  8 08:03 2018 cpp_regex_traits.o
...

迟答,但在这里添加,供以后参考。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17468468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档