c++ - 编译包含 LLVM API header 的 C++ 文件时出错

标签 c++ llvm

您好,

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

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 header 。这是错误消息:

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 参数添加“支持”不会改变任何内容:同样的错误。

这有什么问题吗?

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

最佳答案

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

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

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

这是由于 getGlobalContext 在 llvm 3.6 之后被移除了。所以使用:LLVMContext context; 并在需要时给出它的引用。

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

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

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

在这里使用 module 而不是 mod

关于c++ - 编译包含 LLVM API header 的 C++ 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51430668/

相关文章:

c++ - 稳定 QWidget::paintEvent() 调用频率

c++ - 带有自定义 makefile 的 C++14 的 Eclipse Luna 索引器

c++ - input_event 结构描述(来自 linux/input.h)

java - 如何将 LLVM 集成到 JVM 运行时

c++ - 从断言调用时缺少 llvm-cov 覆盖

c# - 如何使用 API 调用重现 quser.exe?

c++ - 当我将 int 添加到 char ('a' + 1 时调用哪个 operator+ 函数)

llvm - 如何通过网络套接字启动 clangd

c++ - 如何使用 llvm 生成机器码

c++11 - LLVM IR Lambda 函数