私はc++でのクロスプラットフォームコンパイルの苦痛を和らげるために使用できるllvmについてあちこち読んでいました、私はドキュメントを読み込もうとしていましたが、実際の開発問題でそれをどのように使用できるかわかりませんでした誰かが説明できますか簡単に言えば、どうすれば使用できますか?
5 に答える
LLVM の重要な概念は、プログラムの低レベルの「中間」表現 (IR) です。この IR はほぼアセンブラー コードのレベルですが、最適化を容易にするためのより多くの情報が含まれています。
LLVM の威力は、コードの実行が必要になる直前まで、この中間表現のコンパイルを特定のターゲット マシンに延期できることにあります。Just-In-Time (JIT) コンパイル アプローチを使用して、アプリケーションが必要なコードを必要な直前に生成することができます。
多くの場合、プログラムの実行時には、本社で行うよりも多くの情報が得られるため、プログラムを大幅に最適化できます。
まず、C++ プログラムを単一の中間表現にコンパイルしてから、その IR から複数のプラットフォームにコンパイルできます。
Kaleidoscope デモを試すこともできます。このデモでは、実際にコンパイラを作成する必要はなく、IR を作成するだけで新しい言語を作成できます。
パフォーマンスが重要なアプリケーションでは、アプリケーションは、実行する必要がある直前に、実行する必要がある独自のコードを本質的に書くことができます。
LLVM Web サイトにアクセスして、そこにあるすべてのドキュメントをチェックしてみてください。彼らは、LLVM とは何か、そしてその使用方法を詳細に説明しています。たとえば、Getting Startedページがあります。
ターゲットに関する多くの情報は、コンパイル時に使用するシステムヘッダーファイルから取得されることに注意することが重要です。LLVMは、「ポインターのサイズ」や「バイトレイアウト」などの解決を延期しないため、リトルエンディアンプラットフォーム用に64ビットヘッダーを使用してコンパイルする場合、そのLLVMソースコードを使用して32ビットビッグエンディアンアセンブリをターゲットにすることはできません。出力パターン。
LLVM は、その名前が示すように、コード ジェネレーターを備えた低レベルの仮想マシンです。それにコンパイルしたい場合は、gcc フロント エンドまたはclangのいずれかを使用できます。これは、まだ進行中の LLVM 用の c/c++ コンパイラです。
ここですべてをうまく説明している本の良い章があります:www.aosabook.org/en/llvm.html