2

成功せずに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;
}

私のコードは正しくありませんか?何か案は?ありがとう。

4

1 に答える 1

1

JIT の呼び出し元と同じプログラムに外部関数をリンクする必要があります。

于 2011-08-12T22:20:02.877 に答える