私はいくつかのC++チームで構成されているプロジェクトで作業しています。各チームはライブラリを提供し、チームはこれらのライブラリをフロントエンドアプリケーションに統合しています。llvmライブラリの使用方法
アプリケーションはクロスプラットフォームなので、異なるプラットフォーム/ CPUアーキテクチャ/構成用にコンパイルされた同じ(静的な)ライブラリを別のチームが提供する必要があります。例えば。私たちはVisual Studio 2015/2013、32bit/64bit、linux、Debug/Releaseなどを持っています。
これらの静的ライブラリ「マニフェスト」の数を減らすのがいいでしょう。このアイデアは、静的ライブラリをLLVMのビットコードにコンパイルし、llvm-arツールを使用してllvm静的ライブラリを作成することです。特定のプラットフォームのバイナリを作成する必要がある場合、llc(LLVMプラットフォームコンパイラ)を使用してネイティブコード静的ライブラリを作成し、プラットフォームリンカとのリンクを行います。
質問:
- 私が達成したいものを行うには良い方法はありますか?
- llcは静的ライブラリのコンパイルをサポートしていないようで、個々の翻訳単位(.bc - > .o)のみをサポートしているようです。もちろん、個々のビットコードファイルを抽出し、ネイティブオブジェクトファイルにアセンブルし、プラットフォームライブラリアンツール(lib/ar)を使用して静的ライブラリを作成することもできますが、より合理的なソリューションがあるのだろうかと思います。
- ゴールドリンカーは私が必要とするものを作るようですが、ELF形式に制限されているようです。私はWindows/Linuxや多分IOSをサポートする必要があります
私が知る限り、LLVMのビットコードは依然としてマシンに依存しています。ライブラリとリンクをコンパイルする最良の方法は、 - enable-llvmと-flteフラグを指定してld/lldを使用することです。llvmビットコード形式のオブジェクトを選び、全体プログラム最適化を実行して最終バイナリにリンクします。 – berkus
ビットコードがまだマシンに依存している理由を説明できますか?私は違いますが、私はCランタイムを使用するつもりです。 llvmのWebページでlldプロジェクトが見つかりました。残念ながら私はコマンドラインオプションのページに資金を提供していませんでしたが、f、l、t、eフラグが何をするのか説明できますか?通常のgnu ldコマンドラインでは、私はこれらのスイッチを見つけませんでした – user2281723
詳細については下記のAntonの答えをご覧ください。 – berkus