gpt4 book ai didi

c++ - 如何在 LLVM 中调用函数

转载 作者:行者123 更新时间:2023-11-30 01:48:48 25 4
gpt4 key购买 nike

我想请教一下将自己的 c++ 函数调用/绑定(bind)到 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 错误:程序使用了无法解析的外部函数“writeSomething”!

最佳答案

由于C++ name mangling ,该函数的名称实际上类似于 _Z14writeSomethingv - C++ 通过在函数名称中编码类型信息来支持重载。

您可以通过将函数声明为 extern "C"void writeSomething() { ... } 来禁用此功能,或者根据您的编译器的名称修改方案找出它应该被调用的内容并使用它.

关于c++ - 如何在 LLVM 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com