12

モジュールで関数を実行したいのですが、このモジュールでは他のモジュールで依存関係が解決されます。モジュールが変更される可能性があるため(動的コンパイル環境)、単一のモノリシックモジュール内のすべての依存関係をリンクしたくない、つまり回避できる場合

使用したいLinker::linkModulesのですが、これはソースモジュールでは常に破壊的です。単一のモジュールに依存する1つのモジュールでは問題ありません。なぜなら、そのモジュールが変更されたとしても大したことではありませんが、単一のモジュールが変更されたという理由だけで変更されなかったN-1モジュールを再構築して再リンクするのはやり過ぎではないでしょうか。

JITの実行に使用できるlinkModulesの非破壊バージョンがあるのだろうか。

4

3 に答える 3

3

これを試して:

Linker::LinkModules(destinationModule, sourceModule, Linker::PreserveSource, &error);

Linker::PreserveSourceの代わりに合格すると、通話後Linker::DestroySourceも引き続き使用できます。sourceModule

于 2014-01-16T17:56:01.257 に答える
1

Fabric Engine製品( http://fabricengine.com/ )内の動的コンパイル環境でも同様のことを行いました。LLVMは現在、この種の複雑な「JIT」環境にあまり適合していませんが、追加レベルの間接参照(つまり、ダブルポインター)を介してリンクし、llvm :: MemoryManagerをサブクラス化してllvm:をオーバーロードすることで機能させることができました。 :MemoryManager :: getPointerToNamedFunctionは、モジュール間でシンボルをグローバルに解決します。ダブルポインタを使用することにより、他のモジュールを変更せずに1つのモジュールを変更できます。少し注意する必要がありますが、それほど悪くはありません。

于 2014-02-17T20:45:55.487 に答える
0

私はあなたが彼の問題を説明している方法でこれが可能だとは思わない。

理想的なソリューションでは、モジュールABがリンクされている場合、変更Bはすぐに観察できAますか?

これが事実であるならば、私はこれが可能であるとは思わない。A(リンク後の内容を見てみてくださいB。の記号はBにコピーされていますA

の情報を単に保存したい場合は、最初にをBコピーして、結果をに渡します。Bllvm::CloneModuleLinker::linkModules

于 2012-06-12T18:25:20.970 に答える