4

最近、私はコンパイラプロジェクトのバックエンドとしてLLVMを検討していますが、これは非常に有望に見えます。

ただし、LLVMはJITコード(非常に優れています!)またはネイティブプラットフォームのアセンブリをエクスポートできるようですが、実際にはネイティブ実行可能ファイルを作成することはできません。これは、LLVMが主張するコンパイラバックエンドインフラストラクチャの主要な制限のようです。

コンパイルされた実行可能ファイルをLLVMをインストールせずに(つまり、JITなしで)実行できるようにするプロジェクトに取り組んでいます。LLVMには、マシンコード(LLVMビットコードではない)の生成に使用できるネイティブアセンブラーがありますか?

4

1 に答える 1

3

LLVM(あなたが言及したMCライブラリを使用して)は、人気のあるアーキテクチャ(x86は間違いなく最も成熟している)のオブジェクトファイルを生成できます。これは比較的最近の進歩です。MC以前は、LLVMには機能的なアセンブラーがありませんでした。必ず最新リリースのLLVMバージョンを使用してください(現在は3.0ですが、まもなく3.1になります)。

この時点で、LLVMの機能は停止します。次に、オブジェクトファイルを実行可能ファイルに実際にリンクするためのプラットフォームリンカーが必要になります。たとえば、ldLinux-yプラットフォームで使用されます。

これは今日(2012年4月)には当てはまりますが、将来は当てはまらない可能性があることに注意してください。LLD(LLVM Linker)プロジェクトは現在初期段階にあり、外部ツールに依存することなく、LLVMツールを使用して完全にロード可能な実行可能ファイル(および共有ライブラリ)を直接生成するために必要な追加の手順をジャンプするLLVMベースのリンカーを提供することを目的としています。

于 2012-04-25T06:52:11.827 に答える