2010-08-18 56 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的相同程序中。