由于您的问题缺少重要信息,我猜您想要实现以下目标.我猜你将使用c/c ++接口,并且该函数具有签名void fun(void).我还猜你将使用LLVM Builder来创建对这个函数的调用(而不是clang等).
首先使用dlopen/ loadlibrary动态加载函数并获取函数指针fnPtr.
Type*为函数的返回值创建一个
Type* voidType[1];
voidType[0] = Type::getVoidTy(getGlobalContext());
ArrayRef<Type*> voidTypeARef (voidType, 1);
Run Code Online (Sandbox Code Playgroud)
Function*为该功能创建一个.您应该Module* TheModule已经从初始化阶段开始.
FunctionType* signature = FunctionType::get(voidTypeARef, false);
Function* func = Function::Create(signature, Function::ExternalLinkage, "fun", TheModule);
Run Code Online (Sandbox Code Playgroud)
使用addGlobalMapping创建映射的功能.你应该有一个ExecutionEngine* TheExecutionEngine初始化阶段.
TheExecutionEngine->addGlobalMapping(func, const_cast<void*>(fnPtr));
Run Code Online (Sandbox Code Playgroud)
现在,在您想要调用的适当位置,您现在可以使用IRBuilder这样的方式插入对函数的调用.
Function *FuncToCall= TheModule->getFunction("fun");
std::vector<Value*> Args; // This is empty since void parameters of function
Value *Result = IRBuilder->CreateCall(FuncToCall, Args, "calltmp"); // Result is void
Run Code Online (Sandbox Code Playgroud)