我想问你正确的方法是将自己的c ++函数调用/绑定到LLVM中。
我编写了简单的函数:
void writeSomething() {
std::cout << "Awesome" << std::endl;
}
在LLVM中,我正在尝试注册该功能。我已经创建了它的外部链接。
// Void type
llvm::FunctionType* fccType =
llvm::FunctionType::get(
llvm::Type::getVoidTy(getGlobalContext()), false
);
// External - c++
Function *fcc = (Function*) module->getOrInsertFunction("writeSomething",
fccType
);
// Call
std::vector<Value*> emptyArgs;
CallInst::Create(fcc, makeArrayRef(emptyArgs));
仅调用此函数的LLVM输出是 (//评论是我的输入,我如何理解输出)
// External linkage
declare void @writeSomething()
define internal void @main() {
entry:
// Call my function
call void @writeSomething()
ret void
}
程序以消息结束: LLVM ERROR:程序使用的外部函数'writeSomething'无法解析!
答案 0 :(得分:4)
由于C++ name mangling,该函数的名称实际上类似_Z14writeSomethingv
- C ++支持通过编码函数名中的类型信息进行重载。
您可以通过将函数声明为extern "C" void writeSomething() { ... }
来禁用它,或者根据编译器的名称修改方案确定应该调用的函数并使用它。