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
  • 「caps」列の意味は何ですか?
  • キャップ列が異なると、リンクエラーが発生しますか?
4

1 に答える 1

4

良い質問。どこにも文書化されていないようです。オープンソースのおかげで、しかし、答えはotoolsのソースコードで利用可能だったので、より多くの情報が必要な場合はそこを見ることができます。

このフィールドは、CPUの機能ビット(つまりcpusubtype & CPU_SUBTYPE_MASK)を表します。したがって、実際にはcpusubtypeフィールドのサブセットであり、その情報をより簡単に利用できるようにするためだと思います。これはotoolsプログラマーが入れたものであり、Mach-Oヘッダーの一部ではありません。


キャップ列が異なると、リンクエラーが発生しますか?

正確に何をリンクして、ここであなたの質問を得るかどうかわかりませんか?2つのライブラリを異なるプロセッサ用にコンパイルし(したがって、おそらく異なる「caps」フィールドを使用して)、それらをリンクしようとすると、明らかに問題になる可能性があります。ただし、その点では「cputype」フィールドにもっと関心があります。x86コードをARMコードにリンクしている場合(「caps」フィールドよりもそうだと思います)、おそらくヒントが得られます。

一般的に、あなたの特定の状況がそれを要求しない限り、私は誰もドキュメントで言及することさえ気にしない分野にあまり集中しません。

于 2010-12-16T00:11:19.150 に答える