特别提醒:有很多网站转载本文,这本是好事,但是大多都没有注明出处,可悲啊!我后来发下原文有一些不明确或者笔误打错了的地方可以导致混淆,后来多次改正,这些内容转载的网站上面就没有了,而且没有注明出处,读者连发现错误的机会都被剥夺了。请大家多参照本文的最新版。


众所周知:CentOS虽然好用,但是它自己的yum源很小也比较滞后,安装工具往往需要自己下载源码编译。(貌似RedHat和Fedora的源中el版本一致的rpm也可以用,但是没有试过)

其他工具慢一点也就算了,最让人不能认的就是它的gcc版本居然也这么滞后,到现在(2012-12-21)最新的CentOS版本是6.3,官方源上最新的gcc版本是4.4.6!而现在gcc的最新稳定版本是4.7.2,开发版已经到了4.8!

了解c++的朋友都知道,这段版本升级的时期正是各种编译器们向C++11标准飞速靠近的时期,越来越多的C++11特性在新版本中得到支持,因此升级一个功能更完善的gcc势在必行。

 

好了,重要性谈完了,下面开始谈正事。

我的环境是CentOS 6.3版,使用默认的gcc 4.4.6,编译安装gcc 4.7.2。

网上关于升级编译gcc的教程中步骤很多也很繁琐,惨痛的过程我就不说了,我只说一点,其实事情可以很简单。

首先是依赖的库,官方文档说需要gmp、mpc、mpfr,并且提供了下载地址,很多教程都说了自己编译安装,以及这一过程中的一些问题,其实完全不必这么麻烦。难道大家就没有想过gcc作为一个发展多年且很成熟的项目,难道就没有提供一些自动化的解决方案吗?


较新的版本(简化了讨论,修改了一些描述和知识上的错误):http://blog.csdn.net/yanxiangtianji/article/details/12782839 


步骤1:

yum install glibc-static libstdc++-static -y

安装c和c++的静态库(据说如果系统中缺少libc.a和libstdc++.a编译时会出错,但是我没有那么多闲情逸致去试,实践过的朋友可以回复一下,分享一下经验,让大家都长长知识)

步骤2:

下载解压gcc,我的gcc目录是gcc-4.7.2。

步骤3:

进入gcc目录,执行:

./contrib/download_prerequisites 

这个神奇的脚本文件会帮我们下正确版本的载那三个依赖的库(有些系统已经自带了这几个库,那么就可以跳过3、4两步,检查方法参加步骤4)。可以节约我们大量的时间和精力。同时避免版本不一致导致的问题。

可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):

cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install

有兴趣的话,也可以修改gcc的download_prerequisites ,把这几句加进去,实现全自动运行。

步骤4:

你以为这三个库自动下载了、自动make install了就没事了吗?错!

很多人在编译gcc的时候出现各种奇奇怪怪的错误就是这步没有做好。

它们生成的.so文件还不在系统的.so文件的搜索路径里面,需要加进去.

无论你的文件在不在系统默认的.so搜索路径里面,最后都切记一定要执行一下ldconfig,否则系统还是不认。

这三个库默认会放在/usr/local/lib/gmd、/usr/local/lib/mpfr/usr/local/lib/mpc下面,即需要添加的是这三个目录,但是世事无常还是建议大家先用locate gmd.so之类的命令来搜索一下。


大致做法为:

1,找到你的共享库文件被install到哪个目录了(updatedb+locate命令)。

2,如果你的库不是直接放在/lib或/usr/lib或/usr/local/lib下(子目录也不算直接放在),需要修改/etc/ld.so.conf文件,把它们加入你的共享库搜索路径

3,如果在2中添加了共享库路径,切记要执行一下ldconfig,更新相应cache文件让系统能找到你的共享库,否则和没装一样。

具体做法参加我的上一博文“Linux共享库路径配置”http://blog.csdn.net/yanxiangtianji/article/details/8316562

步骤5:

建立临时目录,这个目录用以存放编译时的大量临时文件,是文档要求中必须的。

我是在gcc-4.7.2下建立了一个名为build的目录,进入它。

mkdir build

cd build

步骤6:

配置gcc编译选项

强烈建议阅读INSTALL目录下的说明文档,尤其是configure.html,以确定你的编译选项。

比较基本的选项有--enable-languages,说明你要让你的gcc支持那些语言,--disable-multilib不生成编译为其他平台可执行代码的交叉编译器。--disable-checking生成的编译器在编译过程中不做额外检查,也可以使用--enable-checking=xxx来增加一些检查。

还有一个比较用用的选项是--prefix,它指定了编译出来的文件最终放在哪个目录下,默认是/usr/local/下,你也可以改成/usr彻底直接替换掉旧的gcc。对于一般用户推荐这么做,省的麻烦。

网上还说了什么--with-gmp、--with-mpfr、--with-mpc这三个选项,但是如果你3,4步做好了,就不要配了,反之你还是老实点吧别抱侥幸心理了。

调用gcc-4.7.2目录下的configure文件:

例如:

../configure --disable-checking --disable-multilib --enable-languages=c,c++ --prefix=/usr

步骤7:

编译安装:

执行:

./make   #不解释
#或者:
./make -j4 #之类的命令加快编译(-j后面的数字一般写为cpu核心数的2倍)
#然后你就等吧少年,虽然现在的机器编译gcc已经很快了,但是经过我实测也要几十分钟个把小时。
./make install  #完事!

当然上面几步一定要在前一步顺利结束的情况下进行,如果哪一步出错了,结果都显示error了,就不要再做后面的了,来硬的可是会带来伤害的哦。在shell的输出里搜索"error"看具体的出错点是什么,baidu、google一下为什么。一般是ldconfig没有做好,或者是configure了不支持的选项。

如果你求稳的话,可以在make install之前先make check一下(CentOS下默认没有autogen,所以check会出错,只要make没有错误提示就可以了)。

 

原载于http://blog.csdn.net/yanxiangtianji

转载请注明出处

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐