llvm InitializeNativeTarget() is undefined

llvm InitializeNativeTarget() is undefined

本文关键字:is undefined InitializeNativeTarget llvm      更新时间:2023-10-16

我看到的所有样本都显示llvm::InitializeNativeTarget()第一行被调用。

我刚刚完成了 llvm 和 clang 的构建,并正在尝试运行我的第一个示例,但此函数似乎未定义。我不确定它是否实际上是未定义的,并且这些示例已经过时,或者我在上一步中是否做错了什么。

如果它应该存在,我在哪里可以找到这个函数的定义?还有什么我应该打电话

的吗?
InitializeNativeTarget(); /* error, undefined */
llvm_start_multithreaded();
LLVMContext context;
string error;
llvm::OwningPtr<MemoryBuffer> buffer;
auto result = MemoryBuffer::getFile("test.bc", buffer);
auto m = ParseBitcodeFile(buffer.get(), context, &error);
auto ee = ExecutionEngine::create(m, true, &error);

使用上面的代码和通过 clang 编译的 test.bc 文件,我得到了一个空的执行引擎,所以我假设我没有正确初始化某些东西。

令人惊讶的是很难找到,但该函数似乎已重命名为:

LLVMInitializeNativeTarget()

简单地调用该函数解决了我的问题。

(我还需要调用 ExecutionEngine::create(m, false, &error) 而不是 true

这只是一个澄清。实际上,函数llvm::InitializeNativeTarget

可以在

#include "llvm/Support/TargetSelect.h"

你调用的函数 llvm::LLVMInitializeNativeTarget 存在于

#include "llvm-c/Target.h"

后一个头文件已包含在 ExecutionEngine.h 中。因此你找到了它。这两个函数看起来相同(至少在 v3.9.1 之前),除了它们的返回值。但是,前者是LLVM示例中使用的一种,我建议您坚持使用它,尤其是在使用C++时。