ubuntu12.04 编译安装LLVM3.3,Clang和Libc++

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

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!

欢迎大家和我交流,QQ为997948259

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值