【发布时间】:2011-05-24 11:19:33
【问题描述】:
我正在编写一个 LLVM 脚本引擎,该引擎 JIT 以自定义语言编译脚本代码。我的问题是我无法调用外部函数(即使是 C99 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*)' 不是定义
显然我做错了什么。任何帮助将不胜感激
【问题讨论】:
-
对未来访问者的警告:答案是指已弃用的方法..
-
this 问题的答案显示了如何使用未弃用的方法来做到这一点。