web-dev-qa-db-ja.com

静的ライブラリがビットコードを含んで構築されていることを確認する方法は?

他社が作成した静的ライブラリがあります。それがビットコードを含む静的ライブラリであるかどうかを知りたいのですが、どのコマンドが端末でそれを検出できますか?

32
xCocoa

他の回答ですでに書かれているように、

otool -l yourlib.a | grep __LLVM

行く方法です。

Appleエンジニアの言う 使用

otool -l yourlib.a | grep bitcode

信頼できない

「ビットコード」セクションの検索は、ファイルに埋め込みビットコードが含まれているかどうかを検出するための信頼できる方法ではありません。それを行うには、「__ LLVM」セグメントを検索します。 -fembed-bitcode-markerオプションを使用した通常のビルドでは、実際のコンテンツなしで最小サイズの埋め込みビットコードセクションが生成されることに注意してください。これは、ビルドプロセスを遅くすることなく、ビルドのビットコード関連の側面をテストする方法として行われます。実際のビットコードコンテンツは、アーカイブビルドを行うときに含まれます。

xCocoa によるコメントも参照してください。

IPhone Simulatorのアーキテクチャのコードが含まれている場合(x86_64またはarm64)、otoolはビットコードを報告しないようです。

次のコマンドを使用して、libのアーキテクチャを一覧表示できます。

lipo -info yourlib.a

次に、各アーキテクチャのビットコードを個別に確認できます、例:

otool -Arch armv7 -l yourlib.a  | grep bitcode
otool -Arch arm64 -l yourlib.a  | grep bitcode
52
Oliver

免責事項:私はLibEBCの著者です。

ebcutilを使用して、Mach-Oバイナリまたはライブラリにビットコードが存在するかどうかを確認できます。埋め込みビットコードを抽出するために使用することもできます。

https://github.com/JDevlieghere/LibEBC

2
Jonas

特定のファイルが(yourFile.o)静的ライブラリのビットコードが有効になっている場合、'staticLibrary.a'および同じotoolコマンドを使用します。ただし、macOSでは、デフォルトの抽出ユーティリティを使用してstaticLibrary.aを抽出することは許可されておらず、ほとんどのサードパーティツールも機能しません。

以下の手順に従って、特定の.oファイル

  1. アーキテクチャの情報を取得する

    lipo -info yourStaticLibrary.a
    

例:armv7 arm64

  1. 抽出yourStaticLibrary.a上記のアーキテクチャのいずれかまたは両方

    lipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
    

(抽出する出力パスを指定します)

  1. 'yourStaticLibraryarmv7.a'その後、デフォルトのmac unarchiverで簡単に抽出できます

  2. 解凍すると、フォルダ「yourStaticLibraryarmv7'すべての.oファイルを含む

  3. otool -l yourFile.o | grep bitcodeまたは特定のアーキテクチャ

    otool -Arch armv7 -l yourFile.o  | grep bitcode
    

ファイルのビットコードが有効になっている場合、コマンドラインで「sectname __bitcode」を取得します

1
Naishta

LLVMシンボルに対してテストすることをお勧めします。

otool -l yourlib.a | grep LLVM

「__LLVM」でいくつかの行を取得する必要があります

1
SeikoTheWiz