使用clang的JIT注册extern功能?

时间:2010-08-18 17:46:07

标签: compiler-construction jit llvm clang

我试图用clangs JIT注册extern函数但没有成功。

这是我试图打电话的功能:

extern "C"
int myFunction(int val)
{
 fprintf(stderr, "success!");

 return 1;
}

下面是使用注册代码的代码:

llvm::FunctionType* ft = llvm::FunctionType::get(llvm::Type::getInt32Ty(llvm::getGlobalContext()),
  std::vector<const llvm::Type*>(1, llvm::Type::getInt32Ty(llvm::getGlobalContext())), false);

llvm::Function* F = llvm::Function::Create(ft, llvm::Function::ExternalLinkage, "yipee", Mod);
EE->addGlobalMapping(F, (void*)(intptr_t)yipee);

接下来将由JIT运行的c代码:

int myFunction(int);
int main()
{
   int dd = myFunction(5);

    return 0;
}

我的代码不对或其他什么?有任何想法吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您需要确保将外部函数链接到调用JIT的同一程序中。