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

时间:2018-07-19 19:45:40

标签: c++ llvm

你好,

我已使用llvm安装了llvm-debuginfoapt 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的工具)。

2 个答案:

答案 0 :(得分:2)

如果您需要errs,则应包括正确的标题:

#include "llvm/Support/raw_ostream.h"

ParseIRFile应该在llvm/IRReader/IRReader.h

#include "llvm/IRReader/IRReader.h"

答案 1 :(得分:2)

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