visual studio 2013下安装llvm3.7

最近一直时间一直在搞linux下面的llvm,由于不是特别习惯使用ubuntu,所以最近两天在window下安装llvm,采用的系统为windows7,版本为llvm最新的3.7版本,主要参考以下博客http://blog.csdn.net/dlite/article/details/18142645,但是有些稍微的不同,废话不说,具体安装步骤如下:
一、安装配置LLVM
下载并用VS编译安装LLVM,可以参考《Getting Strated with LLVM Core Libraries》这本书,下载地址为http://download.csdn.net/detail/owuyefeiying/8551331

安装LLVM本质上其实是安装很多的库文件,头文件和可执行exe文件,其他的没啥用处,为了方便大家,我直接将编译之后生成的文件夹压缩进行上传,大家直接下载就行啦,就不用上面那么多繁琐的步骤啦~,下载地址为http://download.csdn.net/detail/owuyefeiying/8551369
下载之后的llvm进行解压后,可以放在任何位置,下面我用$LLVM代替LLVM的安装目录

二、创建和配置我们的项目
1.用VS新建一个空的C++项目,添加一个main.cpp文件,用于写下面的代码。

2.在项目属性中,添加相应的LLVM目录,假设 $LLVM 为安装目录。

包含目录:$LLVM\include

库目录:$LLVM\lib。

这里写图片描述
3.在项目属性中添加C++预处理宏:

_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
这里写图片描述

4.在链接属性中添加LLVM中的所有的库,否则有些例子通过不了:
LLVMLineEditor.lib
LLVMLTO.lib
LLVMInterpreter.lib
LLVMBitWriter.lib
LLVMMCJIT.lib
LLVMIRReader.lib
LLVMInstrumentation.lib
LLVMObjCARCOpts.lib
LLVMPasses.lib
LLVMCore.lib
LLVMScalarOpts.lib
LLVMR600CodeGen.lib
LLVMSelectionDAG.lib
LLVMSparcDesc.lib
LLVMSparcCodeGen.lib
LLVMSparcDisassembler.lib
LLVMSparcAsmPrinter.lib
LLVMSparcAsmParser.lib
LLVMPowerPCCodeGen.lib
LLVMCodeGen.lib
LLVMR600Desc.lib
LLVMR600Info.lib
LLVMMipsDesc.lib
LLVMR600AsmPrinter.lib
LLVMR600AsmParser.lib
LLVMMipsCodeGen.lib
LLVMPowerPCInfo.lib
LLVMNVPTXCodeGen.lib
LLVMPowerPCDesc.lib
LLVMPowerPCDisassembler.lib
LLVMPowerPCAsmPrinter.lib
LLVMPowerPCAsmParser.lib
LLVMNVPTXInfo.lib
LLVMNVPTXDesc.lib
LLVMMSP430CodeGen.lib
LLVMNVPTXAsmPrinter.lib
LLVMMipsInfo.lib
LLVMMipsAsmParser.lib
LLVMMSP430Desc.lib
LLVMMSP430Info.lib
LLVMMipsAsmPrinter.lib
LLVMInstCombine.lib
LLVMHexagonCodeGen.lib
LLVMHexagonDisassembler.lib
LLVMAnalysis.lib
LLVMMSP430AsmPrinter.lib
LLVMHexagonInfo.lib
LLVMARMCodeGen.lib
LLVMHexagonDesc.lib
LLVMCppBackendInfo.lib
LLVMAsmPrinter.lib
LLVMCppBackendCodeGen.lib
LLVMBitReader.lib
LLVMARMDesc.lib
LLVMARMDisassembler.lib
LLVMARMInfo.lib
LLVMAArch64CodeGen.lib
LLVMARMAsmParser.lib
LLVMARMAsmPrinter.lib
LLVMAArch64Utils.lib
LLVMAArch64Info.lib
LLVMAArch64Disassembler.lib
LLVMAArch64Desc.lib
LLVMAArch64AsmPrinter.lib
LLVMAArch64AsmParser.lib
LLVMXCoreCodeGen.lib
LLVMipo.lib
LLVMTransformUtils.lib
LLVMipa.lib
LLVMX86CodeGen.lib
LLVMX86Info.lib
LLVMXCoreInfo.lib
LLVMXCoreDisassembler.lib
LLVMMipsDisassembler.lib
LLVMXCoreDesc.lib
LLVMXCoreAsmPrinter.lib
LLVMX86Utils.lib
LLVMX86AsmParser.lib
LLVMX86Desc.lib
LLVMTarget.lib
LLVMX86Disassembler.lib
LLVMVectorize.lib
LLVMX86AsmPrinter.lib
LLVMSystemZInfo.lib
LLVMSystemZCodeGen.lib
LLVMSystemZDesc.lib
LLVMSystemZDisassembler.lib
LLVMSystemZAsmParser.lib
LLVMSystemZAsmPrinter.lib
LLVMSparcInfo.lib
LLVMDebugInfoDWARF.lib
LLVMAsmParser.lib
LLVMDebugInfoPDB.lib
LLVMExecutionEngine.lib
LLVMLinker.lib
LLVMOrcJIT.lib
LLVMRuntimeDyld.lib
LLVMObject.lib
LLVMProfileData.lib
LLVMMC.lib
LLVMMCParser.lib
LLVMOption.lib
LLVMSupport.lib
LLVMMCDisassembler.lib
LLVMTableGen.lib
这里写图片描述

5.在VS中禁用警告:
4244;4800

三、程序,我们使用官网的Kaleidoscope中的chapter4例子

#include "llvm/Analysis/Passes.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/MCJIT.h"
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Transforms/Scalar.h"
#include <cctype>
#include <cstdio>
#include <map>
#include <string>
#include <vector>
using namespace llvm;

//===----------------------------------------------------------------------===//
// Lexer
//===----------------------------------------------------------------------===//

// The lexer returns tokens [0-255] if it is an unknown character, otherwise one
// of these for known things.
enum Token {
  tok_eof = -1,

  // commands
  tok_def = -2,
  tok_extern = -3,

  // primary
  tok_identifier = -4,
  tok_number = -5
};

static std::string IdentifierStr; // Filled in if tok_identifier
static double NumVal;             // Filled in if tok_number

/// gettok - Return the next token from standard input.
static int gettok() {
  static int LastChar = ' ';

  // Skip any whitespace.
  while (isspace(LastChar))
    LastChar = getchar();

  if (isalpha(LastChar)) { // identifier: [a-zA-Z][a-zA-Z0-9]*
    IdentifierStr = LastChar;
    while (isalnum((LastChar = getchar())))
      IdentifierStr += LastChar;

    if (IdentifierStr == "def")
      return tok_def;
    if (IdentifierStr == "exter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值