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又报错,估计下面没有找到合法的库文件吧。 于是去掉,并且没有产生什么影响。 我是真心不知道大神那个是怎么会那么复杂的。。 CrissChan 认证博客专家 华为云MVP 京东测试架构师 阿里云MVP 京东测试架构师具有十多年的软件测试开发以及技术管理经验。现主要负责质量保障、测试服务化、测试智能化以及DevOps落地,同时引入AITesting和AIOps,完善工具链的智能化和自动化程度,加速端到端交付的进程。主导了京东工程生产力平台精灵平台设计和开发以及工程生产力赋能平台奥利凡德的设计和研发,引入AI技术设计和研发了AI测试框架AAT,实现了部分测试工作机器替代人的目标。华为云MVP,阿里云MVP,北方工业大学软件体系结构实验室特约企业专家,测试敏捷化白皮书特邀编委,多次TID、NCTS、MUSP、TICA等技术峰会特邀讲师,撰写专利20余篇,测试相关论文30左右篇。