2

当我运行otool -favh some/library.so时,有以下字段:

Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64  X86_64        ALL LIB64     EXECUTE    12       1552   NOUNDEFS DYLDLINK TWOLEVEL
  • “大写”列的含义是什么?
  • 大写列不同会导致链接失败吗?
4

1 回答 1

4

好问题。似乎没有任何地方记录。不过,由于开源,答案在 otools 的源代码中提供,因此如果您需要更多信息,可以查看那里。

该字段表示 CPU 的能力位(即cpusubtype & CPU_SUBTYPE_MASK)。所以它实际上是 cpusubtype 字段的一个子集,我想是为了让这些信息更容易获得。这是 otools 程序员放入的东西,而不是 Mach-O 标头的一部分。


大写列不同会导致链接失败吗?

不确定我是否在这里收到您的问题,具体链接什么?显然,为不同的处理器编译两个库(因此可能具有不同的“caps”字段)并尝试将它们链接在一起可能是一个问题。不过,在这方面,我会更关心“cputype”字段。如果您将 x86 代码与 ARM 代码链接起来,它可能会给您一个提示(我猜比“caps”字段更重要)。

一般来说,除非您的特殊情况需要,否则我不会过多关注任何文档中甚至没人愿意提及的领域。

于 2010-12-16T00:11:19.150 回答