CentOS 6.4 编译安装LLVM3.3,Clang和Libc++

原本最新版的已是3.4了,不过,以前编译过一次,失败了,因此此次先用3.3吧 html

另外这是转载的文章 linux

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

 

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

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

LLVM3.3提供了很是丰富的Pre-built Binaries:包括Ubuntu13.04,Ubuntu12.04和Ubuntu10.04,还有Debian六、FreeBSD9和Fedora18,固然还有Apple本身的Mac OS X了。只惋惜没有给CentOS也提供预编译版本,只能本身编译安装了。 this

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

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

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

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

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!

相关文章
相关标签/搜索