llvm InitializeNativeTarget()未定义

jus*_*ase 2 c++ llvm clang

我看到的所有样本都显示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);
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,以及通过clang编译的test.bc文件,我得到一个空的ExecutionEngine,所以我假设我没有正确初始化.

Cod*_*oka 6

这只是一个澄清。实际上,函数llvm :: InitializeNativeTarget可以在以下位置找到

#include“ llvm / Support / TargetSelect.h”

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

#include“ llvm-c / Target.h”

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


jus*_*ase 5

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

LLVMInitializeNativeTarget()
Run Code Online (Sandbox Code Playgroud)

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

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