zoukankan      html  css  js  c++  java
  • CentOS 6.4 编译安装LLVM3.3,Clang和Libc++

    本来最新版的已经是3.4了,不过,之前编译过一次,失败了,所以这次先用3.3吧

    另外这是转载的文章

    http://www.cnblogs.com/codemood/p/3142848.html

     

    LLVM的最新版本3.3终于在6月17日发布了,按之前的计划6月5日就应该发布了,不过毕竟没有太晚,赶在VS2013 preview(6月26日微软Build大会)之前出来了。加上之前gcc4.8.1在5月底6月初发布,当今最优秀的三大C++编译器都在这个月发布重要更新,这个6月份真是C++的好日子啊!

    LLVM之前就已经宣布做到C++11 Feature Complete了,3.3应该是第一个稳定版,之前gcc4.8.1也同样是全面支持C++11,这篇文章介绍了如何在CentOS上编译安装最新的gcc,VS一直是落后很多的,不过还是很期待VS2013 preview中能增加多少C++11特性。

    LLVM3.3提供了非常丰富的Pre-built Binaries:包括Ubuntu13.04,Ubuntu12.04和Ubuntu10.04,还有Debian6、FreeBSD9和Fedora18,当然还有Apple自己的Mac OS X了。只可惜没有给CentOS也提供预编译版本,只能自己编译安装了。

    今天在CentOS上将最新版本的LLVM套件(LLVM,Clang和Libc++)编译安装好了,中间遇到了不少问题。虽然已经有很多博客介绍如何编译安装LLVM了,但是根据我自己亲身体验的情况来看,还是有地方需要注意的,也有东西值得跟大家分享一下。

    安装过程主要参考这几篇文章:

    http://clang.llvm.org/get_started.html

    http://www.cnblogs.com/Frandy/archive/2012/10/20/llvm_clang_libcxx_cxx11.html

    http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html

    下面开始:

    首先,从http://llvm.org/releases/download.html#3.3这边下载最新的版本。如果从SVN下载代码的话,已经是3.4的开发版本了,如果需要使用稳定版本,推荐自己下载3.3的代码包,需要下载5个文件:

    LLVM source code

    Clang source code

    Clang Tools Extra source code

    Compiler RT source code

    LibC++ source code

    下载好了以后,四个压缩包都解压出来,得到四个目录:

    llvm-3.3.src

    cfe-3.3.src

    clang-tools-extra-3.3.src

    compiler-rt-3.3.src

    libcxx-3.3.src

    然后按下面的步骤组织:

    mv cfe-3.3.src clang
    

    mv clang/ llvm-3.3.src/tools/
    

     

    mv clang-tools-extra-3.3.src extra
    

    mv extra/ llvm-3.3.src/tools/clang/
    

     

    mv compiler-rt-3.3.src compiler-rt
    

    mv compiler-rt llvm-3.3.src/projects/
    

    这样以后clang,clang-tools-extra和compiler-rt就可以和llvm一起编译了。

    在llvm-3.3.src同一层目录上新建个目录build-3.3并进入:

    mkdir build-3.3
    				

    cd build-3.3
    			

    然后configure:

    ../llvm-3.3.src/configure --enable-optimized --enable-targets=host-only
    

    注意这边两个选项推荐大家加上,否则会产生巨大的文件,我第一次编译的时候,没有加上这两个选项,编译出来的结果多大9.4G(够吓人的吧?把我的磁盘都耗尽了,还报错,google了好久才发现是磁盘空间不够),耗时超过一个半小时,加上以后编译出来的结果不到1G,i5四核20分钟多一点就编译完成。

    然后make:

    make -j4
    

    尽量把几个核都用上。

    然后make install:

    sudo
    				make
    				install
    			

    用clang++ -v查看下:

    clang version 3.3 (tags/RELEASE_33/final)
    

    Target: x86_64-unknown-linux-gnu
    

    Thread model: posix
    			

    此时clang就可以正常使用了,clang默认用的是C++库gcc的libstdc++。clang用法和gcc类似,如果要使用C++11的话:

    clang++ -std=c++11 [input]
    

    如果想用LLVM自己的libc++,就需要以下步骤(有点小麻烦)

    进入之前解压出来的libcxx-3.3.src:

    cd libcxx-3.3.src/lib
    

    ./buildit
    

    然后在libcxx-3.3.src/lib下面就可以看到libc++.so.1.0文件,这就是libc++的动态库。

    按照下面的步骤把libc++.so.1.0放到/usr/lib下,并创建几个链接:

    sudo
    				cp ./libc++.so.1.0 /usr/lib
    

    cd /usr/lib
    

    sudo
    				ln -sf /usr/lib/libc++.so.1.0 libc++.so
    

    sudo
    				ln -sf /usr/lib/libc++.so.1.0 libc++.so.1
    			

    然后把libcxx-3.3.src/include目录拷贝到/usr/include/c++/v1(这个地址是clang默认查找的目录,如果目录不存在则自己创建):

    cp -r libcxx-3.3.src/include/ /usr/include/c++/v1
    

    按理说,这样以后,就可以了,使用libc++的方式如下:

    clang++ -stdlib=libc++ -std=c++11 [input]
    

    但是我这边编译的时候,提示找不到头文件,需要手动加上-I/usr/include/c++/v1/:

    clang++ -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/ [input]
    

    运行的时候,也会提示链接错误:error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory。

    解决办法是在~/.basrch中加入下面的环境变量:

    export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib
    

    重启个shell就可以了正常运行了,上面这些找不到头文件和链接错误都是因为使用libc++的原因,如果使用默认的libstdc++就没有这些问题

    OK,尽管使用起来有点小麻烦,不过写个makefile就不用每次都敲那么长的命令了,Enjoy!

  • 相关阅读:
    redis sentinel搭建以及在jedis中使用
    redis入门指南书中概要
    mysql crash cource 书中实例
    图片服务器域名选择
    自行实现一个简易RPC框架
    webservice基础
    maven实战
    类似◇形的图形,四边都是对应的行数的数字。
    C 中随机数
    给特定的寄存器赋值,读特定的寄存器
  • 原文地址:https://www.cnblogs.com/davytitan/p/3924402.html
Copyright © 2011-2022 走看看