CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
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-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++ [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.
然后把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++ [input]
但是我这边编译的时候,提示找不到头文件,需要手动加上-I/usr/include/c++/v1/:
clang++ -stdlib=libc++ -std=c++ -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!
CentOS 6.4 编译安装LLVM3.3,Clang和Libc++的更多相关文章
- CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1
http://blog.163.com/zhu329599788@126/blog/static/6669335020161179259975 http://www.cnblogs.com/codem ...
- CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...
- centos 7.0 编译安装php 7.0.3
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...
- CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3
http://www.osyunwei.com/archives/8867.html 一.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables #编辑防火墙配置 ...
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13
CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好I ...
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
说明: 操作系统:CentOS 6.2 32位 系统安装教程:CentOS 6.2安装(超级详细图解教程): http://www.osyunwei.com/archives/1537.html 准备 ...
- CentOS 6.4编译安装淘宝web服务器Tengine
Tengine 是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商城 ...
- CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27
CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27 说明: 操作系统:CentOS 6.8 32位 准备篇: 一.系统约定 软件源代码包存放位 ...
- CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享
一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
随机推荐
- c#中的事件
之前的博客讲到委托,委托本质上是将方法作为方法的参数传给方法.实际开发中,实现某个功能的的代码通常会封装成一个类,本例中字符串处理封装成MyStringProc类, 代码如下: namespace D ...
- Windows下如何枚举所有进程
要编写一个类似于 Windows 任务管理器的软件,首先遇到的问题是如何实现枚举所有进程.暂且不考虑进入核心态去查隐藏进程一类的,下面提供几种方法.请注意每种方法的使用局限,比如使用这些 API 所需 ...
- PHP之負載均衡下的session共用
最近忙於開發台灣運動彩券第四版的程式,所以已經很久沒有上來寫東西了,今天隨便寫點東西和大家分享. 首先說一下負載均衡,相信大家都知道負載均衡可以很好地解決網站大流量的問題,負載均衡就是把用戶的請求分發 ...
- 2013年的一些常用PHP資源整理下載
這些資源基本上都是一些免積分或只需要1個積分就能下載的資源,經過整理篩選最後分享給大家,希望大家喜歡: PHP手册(chm) http://download.csdn.net/detail/u0118 ...
- 为什么Android的图片质量会比iPhone的差?
经常看到有人问:“安卓版微信发出去的图片怎么那么渣!比iPhone的差远了!”.不只是微信,很多应用安卓版的图片质量就是要比iPhone版逊色很多,这到底是怎么回事? 我们团队最初也纠结 ...
- .NET中的流
当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...
- PHP —— 读取文件到二维数组
转自:PHP读取自定义ini文件到二维数组 读取文件,可以使用file_get_contents,file,parse_ini_file等,现在有一个需求,需要读取如下格式的文件: [food] ap ...
- 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果
(国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果 相信这么多手机APP中 ...
- iOS网络编程模型
iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...
- TP收集一些可以用的资源
http://www.thinkphp.cn/code/2184.html UI http://www.thinkphp.cn/code/2158.html 报名 http://www.th ...