2010-08-18 29 views
2

我试图用clangs JIT注册一个extern函数没有成功。用clang的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); 

而且继承人的C代码,这将是由JIT来跑:

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

    return 0; 
} 

我的代码是不正确的还是别的?有任何想法吗? 谢谢。

+0

什么是错误?什么是启动llvm的完整命令行? – osgx 2011-05-22 02:05:51

回答

1

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