zoukankan      html  css  js  c++  java
  • linux环境c++开发:ubuntu12.04使用llvm3.4.2

    什么是 clang/llvm/libc++[1]

    clang 是最近几年(在大财主苹果的支持下)发展得非常好的 C 家族语言 (包括C/C++/Obj-C/Obj-C++) 编译器前端,所谓前端,就是它可以认识 C/C++/Obj-C/ObjC++ 代码,并且把它转化成某种更接近机器指令的形式。理论上说,“某种形式”是语法树,但作为一个工具,clang 实际上会帮助你调用链接器生成可执行代码,这跟 gcc 是一样的。

    llvm 是一个通用的编译优化和代码生成平台,它定义了一个中间语言 LLVM IR,只要前端把代码编译成 LLVM IR,就可以使用 llvm 丰富的优化模块和代码生成模块。换句话说,llvm 让“创造一种计算机语言”变成了一个相对容易的事情,这件事情会有深远的影响。

    libc++ 是针对 clang 特别重写的 C++ 标准库,也算是 clang 的“御用”库了。这就像 libstdc++ 和 gcc 的关系,但 clang 也可以用 libstdc++。

    何处下载

    http://llvm.org/releases/download.html

    目前最新版本为3.4.2;其中提供了为ubuntu12.04_x86_64预编译好的二进制文件;

    编译源码

    然而事情没有想象中那么简单,我的系统是ubuntu 12.04.4 LTS 32位系统。原先使用预编译好的二进制文件,结果提示无法执行二进制文件。使用ls -l查看clang权限,发现三组用户均有执行权限,因此考虑是编译平台问题,注意到预编译的版本为x86_64,原以为指的是x86与x64平台均可,网上查询之后发现x86_64指的是64位系统。

    通过命令

    uname -m

    可查看ubuntu是32位还是64位,如果是i386到i686,那就是32位系统;如果是x86_64 ,那就是64系统[2]。

    无奈只好下载源码在本机上编译。

    步骤1:获取源码

    http://clang.llvm.org/get_started.html中使用的是svn的方法,当然我们也可以从"何处下载"中提到的地址去下载源码。需要获取的源码有:Clang source code、LLVM source code、Clang Tools Extra(可选)、Compiler RT source code。

    这里通过浏览器下载获得源码,参考svn方法,下载完成后将文件夹组织如下

    LLVM source code -> llvm

    Clang source code -> llvm/tools/clang

    Clang Tools Extra(optional) -> llvm/tools/clang/tools/extra

    Compiler RT source code -> llvm/projects/compiler-rt

    步骤2:编译LLVM和Clang

    mkdir build
    

    与llvm目录同层,建立build目录存放编译结果

    cd build
    ../llvm/configure --enable-optimized --enable-targets=host-only
    

    进入build目录,并配置llvm[3],其中的选项在http://llvm.org/docs/GettingStarted.html#getting-started-with-llvm中提到

    • ../llvm/configure [options] Some common options:
      • --prefix=directory — Specify for directory the full pathname of where you want the LLVM tools and libraries to be installed (default /usr/local).
      • --enable-optimized — Compile with optimizations enabled (default is NO).
      • --enable-assertions — Compile with assertion checks enabled (default is YES).
    • make [-j] — The -j specifies the number of jobs (commands) to run simultaneously. This builds both LLVM and Clang for Debug+Asserts mode. The --enable-optimized configure option is used to specify a Release build.

    配置完成后就是

    make -j2
    make install
    

    测试

    clang helloworld.c
    

    会在当前目录下生成a.out文件,./a.out执行之,输出helloworld即大功告成。

    [1]http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html by 一念天堂

    [2]http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=1664 by jink2005

    [3]http://www.cnblogs.com/Frandy/archive/2012/10/20/llvm_clang_libcxx_cxx11.html by Frandy.CH

  • 相关阅读:
    Javascript中怎么定义类(私有成员、静态成员)?
    Web前端国内的叫法与行业归类吗
    CSS hack,CSS简写,CSS定义应注意的几个问题
    7个在IE和Firefox中不同的JavaScript语法
    IE和Firefox中的事件
    IE8的css hack /9
    CSS hack
    运行,复制,保存,runCode,copyCode,saveCode,运行代码框
    自由使用层的叠加
    WordPress自定义URL的Rewrite规则
  • 原文地址:https://www.cnblogs.com/hzhesi/p/3816499.html
Copyright © 2011-2022 走看看