私も書いた C++ ライブラリを使用する C++ プロジェクトがあります。すべてをビルドするためにclang ++ 3.3を使用しています。ライブラリ内の各ファイルは次のようにコンパイルされます。
clang++ -c -O -emit-llvm somefile.cpp -o somefile.bc
次に、llvm-link を使用して、すべてのライブラリ *.bc ファイルを 1 つのビット コード ファイルに結合します。
llvm-link -o MyLibrary.bc somefile.bc someotherfile.bc etc.bc
私はこれをオブジェクト ファイルのアーカイブの作成に似ていると考えていますが、実際の動作に基づいてそれが正しいとは思いません。
次に、上記と同様のコマンドを使用して、プロジェクトのソース ファイルをコンパイルします。次に、llvm-link (再び) を使用して、これらを結合し、ライブラリ ビット コード ファイルと一緒に、このような単一のビット コード ファイルにします。
llvm-link -o app.bc1 main.bc x.bc y.bc path/to/MyLibrary.bc
次に、app.bc1 をネイティブ オブジェクト ファイルにコンパイルします。
llc -filetype=obj app.bc1 -o app.o
最後に、もう一度 clang++ を使用して、このネイティブ オブジェクト ファイルをリンクします (C++ 標準ライブラリなど、必要な他のネイティブ ライブラリに対してもリンクします)。
clang++ app.o -o app
ただし、アプリケーションのビット コードを llvm-link すると、MyLibrary.bc の内容全体が結果に含まれるように見えます。したがって、最終的なリンクでは、実際には使用していないライブラリ コンポーネントによって行われた参照を解決する必要があります。
私がやりたいことは、MyLibrary.bc からアプリケーションに必要なビット コード ファイルだけを抽出することです。llvm-ar プログラムがあるようですが、それについて読んでも、ここで役立つという印象はありません。ライブラリをllvm-linkの代わりにllvm-arと組み合わせることができると思いましたが、わかりません。必要なのは少しプッシュするだけだと思っています:)