LLVMにはストレージの単位であるLLVMContext
があり、新しいシンボル(関数とタイプ)が作成される場所はllvm::Module
です。LLVMのコンパイル単位の正しい抽象概念は何ですか?
私の質問は、コンパイル単位に使用する正しいllvm抽象は何ですか? Module
はありますか?これは実際にはより広い範囲でのものですか?つまり、共有ライブラリのターゲットです。
コンパイル単位はすべての結果を満たす必要があります。エラーなしですべてのコンテンツをコンパイルするか、またはエラーがあり、CU内のシンボルが使用可能になる前に修正して再構築する必要があります。私の頭では、これはコンパイル単位が表すべきものの定義です。
モジュールがCUのための適切な抽象化であれば、他の(正確にコンパイルされた)Module
のオブジェクトを新しいモジュールに提示するにはどうすればよいですか?それを見つけることができるように、ビルドされていますか?私は宣言を追加する必要がありますか?またはこれにいくつかの他の迅速な方法がありますか? clang
で該当する行に
点が大きな助けになるでしょう
コンパイラの問題ではなく、リンカの問題について説明しています。それとは関係のない「clang」自体には何もありません。 LLVMのリンクビットを調べる必要があります。 –
すべてのシンボル解決がリンクフェーズに遅れることはありません。いずれにしても私はllvmに懸念しています - 標準クライアントの例であるので、clangにしか言及しません – lurscher
理想的には、コンパイラの一部としてコンパイル単位を実行することは決してありません。そういうわけで、私はそれらのための適切な抽象化がないと主張するでしょう。 – Puppy