Llvm RTDyldMemoryManager::getSymbolAddressInProcess在主机进程中找不到符号

Llvm RTDyldMemoryManager::getSymbolAddressInProcess在主机进程中找不到符号,llvm,jit,Llvm,Jit,我有一个静态库(.a),它使用llvm JIT来运行代码。我希望它能够调用主应用程序中的函数。我创建了一个extern声明并在IR中调用它。我可以看到JIT试图通过调用内存管理器子类上的getSymbolAddress来解析我的符号。对于这个符号,我应该能够使用以下方法找到它: if (auto SymAddr = RTDyldMemoryManager::getSymbolAddressInProcess(name)){ return SymAddr;

我有一个静态库(.a),它使用llvm JIT来运行代码。我希望它能够调用主应用程序中的函数。我创建了一个extern声明并在IR中调用它。我可以看到JIT试图通过调用内存管理器子类上的getSymbolAddress来解析我的符号。对于这个符号,我应该能够使用以下方法找到它:

 if (auto SymAddr = RTDyldMemoryManager::getSymbolAddressInProcess(name)){
            return SymAddr;
        }
但我发现getSymbolAddressInProcess总是返回0

我试图找到的函数声明为extern“C”

我已经确认这不是一个损坏的问题(我尝试使用和不使用前缀\来解决)。我已尝试在主机中调用该函数,以确认编译器/链接器没有剥离该函数。我也可以从调试器调用它,确认它存在

类似的问题表明需要打电话

llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr, &error); 

我正在这样做,没有返回任何错误。

结果表明,我试图在主机进程中找到的符号被标记为nm发现的本地(t)

nm HostProcess | grep _function_name
00000001000f8590 t _function_name
解决办法是增加

__attribute__((visibility("default")))
函数声明。nm立即返回全局(T),getSymbolAddressInProcess返回函数ptr