我正在编写一个LLVM脚本引擎,JIT使用自定义语言编译脚本代码。我的问题是我无法调用外部函数(即使C99 erf()函数失败)。将LLVM JIT代码链接到外部C++函数
例如,如果我为extern“C”的ERF功能,
extern "C" double erft(double x){
return erf(x);
}
,并创建具有外部链接的功能
std::vector<const Type*> Double1(1,Type::getDoubleTy(getGlobalContext()));
FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),Double1,false);
Function *erft = Function::Create(FT,Function::ExternalLinkage,"erft",TheModule);
运行我的埃尔夫特河脚本(0.0时收到以下错误消息):
LLVM ERROR: Program used external function 'erft' which could not be resolved!
手动进行映射,
void ExecutionEngine::addGlobalMapping(const GlobalValue * erfF, void * erft);
会得到我下面的错误:
declaration of `void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)' outside of class is not definition
很显然,我做的事情非常错误的。任何帮助,将不胜感激
未来访问者的警告:答案是引用不推荐的方法。 – antipattern 2017-08-31 08:43:16
[this]的答案(https://stackoverflow.com/questions/48105342/llvm-jit-add-library-to-module)问题显示了如何使用非弃用方法来做到这一点。 – 2018-01-05 15:12:56