我正在编写一个 LLVM 脚本引擎,用于 JIT 编译自定义语言的脚本代码。我的问题在于无法调用外部函数(即使是 C99 标准库中的 erf() 函数也无法成功调用)。
例如,如果我extern "C" erf 函数,
例如,如果我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);
运行我的脚本并使用 erft(0.0) 时,出现以下错误消息:
LLVM 错误:程序使用了无法解析的外部函数 'erft'!
需要手动进行映射。
void ExecutionEngine::addGlobalMapping( const GlobalValue * erfF, void * erft);
会得到以下错误:
`void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)'的声明超出了类定义
显然我做错了什么。非常感谢您的帮助。