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

时间:2014-09-21 00:08:29

标签: compilation linker clang llvm llvm-c++-api

我试图使用C ++编译器编译以下程序:

#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++ main.cpp -o main

但是,当我编译时,我收到以下编译错误:

main.cpp:2:10: fatal error: 'llvm/IR/LLVMContext.h' file not found
#include "llvm/IR/LLVMContext.h"
         ^
1 error generated.

在这种情况下,我不完全确定在使用Clang编译main.cpp时如何链接LLVM API头。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您需要检出LLVM或将其安装在系统的某个位置。您可以下载二进制版本(包含可以构建的标题和库),如下所述:http://llvm.org/releases/download.html#3.5

您还可以从其SVN存储库中查看LLVM,如下所述:http://llvm.org/docs/GettingStarted.html#checkout

一旦你这样做,我建议你看看Makefiles附带的llvm-clang-samples存储库,它展示了如何构建示例程序和最新的LLVM。

答案 1 :(得分:1)

您可以使用以下命令: g ++ -std = c ++ 11 main.cpp`llvm-config --system-libs --cppflags --ldflags --libs core` -o main

其中--libs和--system-libs标志用于链接, - cppflags用于处理包含路径。

谢谢