今天又搞了一天,升级成功的那一刻,我都快感动得哭了。。。什么都不说了,都是泪。。。
其实升级不难,真的一点都不难,重点是被自己人的文档坑了。。
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
http://blog.csdn.net/magicyang87/article/details/7972169
1.下载源码包
wget http:
//ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
解压:
tar -jxvf gcc-4.8.0.tar.bz2
2.下载编译所需依赖库
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
3.建立编译输出目录
mkdir gcc-build-4.8.0
4.进入此目录,执行以下命令,生成makefile文件
cd gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
5.编译
make -j4
如果编译成功,则时间是比较长的,半个小时左右,所以如果你看它一直在输出没有立刻停下来,应该很开心!
6.安装
sudo make install
7.切换GCC到新版
确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下
ls /usr/local/bin | grep gcc
添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40
8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!
![](http://images0.cnblogs.com/blog/510101/201304/10205105-6e0a4bf6fc134eb3af8e9735316de74c.jpg)
看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
=================万恶的分割线===========================
首先是参考我们伟大的头儿的博客,http://blog.csdn.net/yanxiangtianji/article/details/8365630。
坑一、libstdc++-static
他这过程也是参考各种博客集成而来,因为我网上看大部分第一步都是:yum install glibc-static libstdc++-static -y
可其实centos的源上根本没有libstdc++-static,第一个是有的,请安装。
坑爹的是,按照教程进行到编译make 之后,查看目录下的config.log 文件 ,搜索err,果然报 static-libstdc++的错!
这下我可认真了,死都要把libstdc++-static装上。
首先,换centos的源,换了163的源(http://www.cnblogs.com/peterpanzsy/archive/2013/04/07/3003387.html),不行,后来跑oschina上提问,大神说epel源上应该有,于是换epel的源,仍然屁都没有!
于是去下rpm包,centos的软件包又不多,只能去下fedora的,一个家族的可以一试,epel源两者也通用的。
rpm -ivh xxx.rpm
结果出现依赖问题,于是下了这么一堆:
![](http://images0.cnblogs.com/blog/510101/201304/10211837-bf7d8d85ede24e54aa0078496a2e9744.jpg)
可是安装第一个的时候又跟系统自带的4.4.6版本的冲突,尼玛的,yum remove又因为依赖关系不可行,总不能卸载自带的gcc 4.4.7吧,后面编译新的gcc还要靠它呢,不能冲动。
今天上午就是乱搞,搞到报kernel的错,下午花了一个小时重装的系统。
还有一个原因,大神误以为他当年6.3的centos是成功yum装上了libstdc++-static,于是我顺道重装的时候换成了centos6.3的版本,开始是6.4的其实。
最后发现6.3的源上也没有这个神奇的东西。
于是对安装libstdc++-static绝望了。。。放弃。坑二、三个依赖库是否要手动编译安装的问题。
进入gcc目录,执行:
./contrib/download_prerequisites
下正确版本的载那三个依赖的库。
大神说:可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):
cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译gcc,直接报两个error停掉了,然后就出现第一步搜到的libstdc++-static错误。
后来跳过手动装gmd mpfr mpc之后,才执行了编译成功了。。。
坑三、共享库路径的问题
因为大神那篇博客里说以上的三个共享库不在系统默认路径下。
我们可以搜一下:locate mpc|grep so
确实有/usr/local/lib/libmpc.so
可是当我在/etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
可是当我在/etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。
我是真心不知道大神那个是怎么会那么复杂的。。