我看到的所有样本都显示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,所以我假设我没有正确初始化.
这只是一个澄清。实际上,函数llvm :: InitializeNativeTarget可以在以下位置找到
#include“ llvm / Support / TargetSelect.h”
您调用的函数llvm :: LLVMInitializeNativeTarget存在于
#include“ llvm-c / Target.h”
后者的头文件已经包含在中ExecutionEngine.h。因此,您找到了它。除返回值外,这两个函数看起来相同(至少到v3.9.1为止)。但是,前者是LLVM示例中使用的那个,我建议坚持使用它,尤其是在使用C ++的情况下。
令人惊讶的是很难找到,但该功能似乎已重命名为:
LLVMInitializeNativeTarget()
Run Code Online (Sandbox Code Playgroud)
简单地调用该函数解决了我的问题.
(我还需要调用ExecutionEngine :: create(m,false,&error)而不是true)