Rust 如何在基于LLVM MCJIT的JIT中解析当前进程符号?

Rust 如何在基于LLVM MCJIT的JIT中解析当前进程符号?,rust,llvm,jit,Rust,Llvm,Jit,我正在创建一个简单的基于MCJIT的JIT(更准确地说是实现)。我正在使用SectionMemoryManager::getSymbolAddress进行符号解析。它可以看到库中的符号(例如sin函数),但无法解析程序中的函数(全局,用nm可见,用T标记)。这是预期的行为吗?还是我的代码中有错误 如果这是预期的行为,我应该如何正确解析当前进程中的符号?我现在使用LLVMAddSymbol从进程中添加符号,因此分辨率开始工作。这是正确的解决方案吗 对于那些,谁会读我的代码。符号的问题与名称损坏无关

我正在创建一个简单的基于MCJIT的JIT(更准确地说是实现)。我正在使用SectionMemoryManager::getSymbolAddress进行符号解析。它可以看到库中的符号(例如sin函数),但无法解析程序中的函数(全局,用nm可见,用T标记)。这是预期的行为吗?还是我的代码中有错误

如果这是预期的行为,我应该如何正确解析当前进程中的符号?我现在使用LLVMAddSymbol从进程中添加符号,因此分辨率开始工作。这是正确的解决方案吗


对于那些,谁会读我的代码。符号的问题与名称损坏无关,因为当我试图使SectionMemoryManager::getSymbolAddress工作时,我使用了no_mangle指令,因此它们的名称正确。

多亏了Lang Hames,他在其他地方回答了我的问题。如果有人会和我一样看待这个问题,我在这里引用这个案例的答案:

在回答您的问题时:
SectionMemoryManager::getSymbolAddress
最终(通过
RTDyldMemoryManager
基类)调用
llvm::sys::DynamicLibrary::SearchForAddressOfSymbol
,它将搜索以前加载的所有动态库中的符号。您可以调用
llvm::sys::DynamicLibrary::loadlibrary permanently(nullptr)
作为JIT初始化的一部分(在调用
getSymbolAddress
之前),将程序的符号导入
DynamicLibrary
的符号表中


如果您真的想将程序中的所有函数公开给JIT代码,这是一个很好的方法。如果您只想公开有限的一组运行时函数,可以将它们放在共享库中,然后加载。

啊,那没关系。我想可能会有一个论坛或IRC室,那里会有更多的背景细节-你永远不知道未来的搜索者在解决类似问题时可能想知道什么。