编译包含LLVM API标头的C ++文件时出错

大码

你好,

我已经安装llvmllvm-debuginfo使用apt install并且正在尝试编译此文件:

llvm_test.cpp

#include <stdio.h>
#include "llvm/IR/LLVMContext.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/IR/Module.h"

int main( int argc, char* argv[] )
{
   if( argc < 2 )
      llvm::errs() << "Expected an argument - IR file name\n";

   llvm::LLVMContext &context = llvm::getGlobalContext();
   llvm::SMDiagnostic err;
   llvm::Module* module = llvm::ParseIRFile( argv[1], err, context );

   if( !mod )
   {
      err.print( argv[0], errs() );
      return 1;
   }

   return 0;
}

使用以下命令:

$ clang++ -std=c++11 llvm_test.cpp `llvm-config --system-libs --cppflags --ldflags --libs core` -o llvm_test

但似乎找不到所需的API标头。这是错误消息:

llvm_test.cpp:9:13: error: no member named 'errs' in namespace 'llvm'
  llvm::errs() << "Expected an argument - IR file name\n";
      ~~~~~~^
llvm_test.cpp:11:39: error: no member named 'getGlobalContext' in namespace
      'llvm'
   llvm::LLVMContext &context = llvm::getGlobalContext();
                                ~~~~~~^
llvm_test.cpp:13:33: error: no member named 'ParseIRFile' in namespace 'llvm'
   llvm::Module* module = llvm::ParseIRFile( argv[1], err, context );
                          ~~~~~~^
llvm_test.cpp:15:9: error: use of undeclared identifier 'mod'
   if( !mod )
        ^
llvm_test.cpp:17:27: error: use of undeclared identifier 'errs'
      err.print( argv[0], errs() );
                      ^
5 errors generated.

如注释中所建议,在llvm-config参数中添加“ support”不会改变任何内容:相同的错误。

这有什么问题?

注意:我在Windows上使用Cygwin,我的意思是apt下的apt-cyg(类似于Cygwin的工具)。

拉特涅

1)错误:名称空间“ llvm”中没有名为“ errs”的成员

您必须包括: #include "llvm/Support/raw_ostream.h"

2)错误:名称空间中没有名为“ getGlobalContext”的成员

这是由于llvm 3.6之后删除了getGlobalContext。因此请使用:LLVMContext context;并在需要时提供参考。

3)错误:命名空间“ llvm”中没有名为“ ParseIRFile”的成员

您必须包括: #include "llvm/IRReader/IRReader.h"

4)错误:使用未声明的标识符'mod'

module在这里使用而不是mod

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用g ++-arm-linux-gnueabi时包含C ++系统标头的正确方法?

我应该还是不应该在不同的c文件中包含相同的标头,而这些标头又在主文件中使用?

预编译的标头和常规包含

使用Apple的LLVM编译器-O而不是g ++ -7.2.0编译-O时,C ++代码段出错

尝试在csv文件中实现标头时出错

Visual Studio代码:C / C ++:显示的标头/包含文件的多个定义;怎么修?

如果标头已经包含在预编译的标头中,我应该继续在源文件中包含标头吗?

CMake包含“私有”标头时出错

包含标头时防止多个#define

使用c#http客户端时,请求标头必须仅包含ASCII字符?

C ++标头包含

防止在编译时将标头包含在某些文件中?

为什么要在多个cpp文件中包含相同的标头,然后进行编译?

Clang + VS2013:包含C ++标头时发生错误(vs2012:working)

如何编译包含LLVM API标头的C ++程序?

包含GLFW文件时出错

C ++:为什么在包含标头时出现“未在此范围内声明”错误?

C ++成功编译,不包含<string>标头

在C ++中包含标头

编译lex.yy.c时未找到标头y.tab.h

编译两个C文件不起作用,找不到标头

读取文件 C 时出错

MonoDevelop C# - 编译类文件时出错

当它们包含命名空间时,如何在 SWIG 中 %include C++ 标头?

编译包含“Aux”类的 Java 文件时出错

c++ 模板特征——编译时不包含头文件

Mongoose - 包含标准 C++ 库文件时出错

编译 C 文件时出错。致命错误:找不到“conio.h”文件

在 Swift 项目中使用 C++ 文件时包含错误的标头