llvm::Module
既にリンクされているを受け取る C++ 関数を作成し、それを実行可能ファイルに出力したいと考えています。プロセスを fork してコマンドラインの clang を呼び出すのではなく、llvm/clang API を使用する必要があります。
llvm/clang ソース コードを調べた後、私が見つけた最も近いものは、Module
a を .o ファイルに出力することです。たとえば、llc ツール (tools/llc/llc.cpp) は、 を呼び出すことでこれを実現しTargetMachine::addPassesToEmitFile(...)
ます。
Module
別の方法として、 を .bc ファイルに書き込んでから、 を作成しCompilerInstance
て呼び出しますExecuteCompilerInvocation
(tools/clang/tools/driver/cc1_main.cpp のように)。しかし、ファイル I/O のオーバーヘッドがあります。
それで、私は可能なことを求めていますか、それとも別の方法に頼らなければなりませんか?
編集: (もちろん、これは可能です。clang ソース コードのどこかで発生しますが、見つかりません。)