5

CentOS 6编译升级gcc清晰简易教程(可通用大部分Linux版本)

 3 years ago
source link: https://blog.csdn.net/yanxiangtianji/article/details/8365630
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

CentOS 6编译升级gcc清晰简易教程(可通用大部分Linux版本)

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

众所周知: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

转载请注明出处


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK