centos 6 升级gcc

今天又搞了一天,升级成功的那一刻,我都快感动得哭了。。。什么都不说了,都是泪。。。

其实升级不难,真的一点都不难,重点是被自己人的文档坑了。。

系统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

8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!
 
 
看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
 =================万恶的分割线===========================
 首先是参考我们伟大的头儿的博客,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
结果出现依赖问题,于是下了这么一堆:
可是安装第一个的时候又跟系统自带的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
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译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又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。
 
 
我是真心不知道大神那个是怎么会那么复杂的。。
 
 
 
原文地址:https://www.cnblogs.com/peterpanzsy/p/3006838.html