最近Mars在一个问题上越挖越深,深到要在GCC的代码里面找线索,尽管一路上无数的蛋疼肛裂,依然无法削减他半点激情。现在问题的答案已经比较清晰了,但为了在不一样的环境下重新再验证一把,于是今天一整天都在vm上安装更新的OS,更新的GCC。
安装GCC一直是Mars心中一块阴影处,曾经他无数次安装失败,被打击得遍体鳞伤,但今天他还是硬扛着心中的恐惧开始了安装之旅,不过这一次有地球圈最强OP lxm的沿路辅助,相信成功的概率还是很大的。
大环境是CentOS 6.3,刚装好OS的时候里面真的是空空如也,没有GCC,没有make,什么都没有,甚至连网都上不了,因为onbooy="no"竟然成了默认设置……当然这个马上就修正过来了。
1.
首先第一步是yum install gcc,先装一个默认的gcc,不知道是不是因为OS版本比较高,因此一下子就装上了gcc-4.4.7,也许在4.8.0已经发布的今天看来,4.4.7已经是上了年纪的一代,然而这对于整整两年里面只跟4.1.2打交道的Mars来说已经是非常新鲜的事物。
还记得当时就《<stddef.h>一日游》那篇文章跑到gcc@gcc.gnu.com上提问,回复我的那位国外朋友第一句跟我说的就是:
接下来不用说就是厚着脸皮扛着满头黑线继续敲键盘向对方交流发问。为什么上面说的是4.1.2,下面说的是4.1.1呢,因为在gcc的库文件里面,4.1.2只是对4.1.1做了一个符号链接,当然这可能只是在特别平台上发生的事情。
这里扯得有点远,但也都是为了吐槽一下国内的行业里那些爱偷懒和没有探究精神的工程师们,在他们的带领下我们走向了寻求稳定的光明伟大道路。
2.
默认GCC装完之后,就开始4.8.0的安装之旅了,首先要搞定的是三大基友——gmp,mpfr和mpc,他们之间互相也有依赖顺序,好像就是前面这个顺序(火星人真没长什么记性,刚装完就忘记了),反正安装顺序乱了也configure失败,所以实际操作就知道了。下面链接的页面中有一个gcc官网给出来的预配环境集合,很不错,三大基友都在里面,大伙就不用到处找去了:
ftp://gcc.gnu.org/pub/gcc/infrastructure/
下面的链接也有对一些安装前提条件的解释:
http://gcc.gnu.org/install/prerequisites.html
三大基友安装完毕之后还得到/etc/ld.so.conf.d下面配置相应的lib路径,当然文件名随便自己起,带上版本号会好一点:
这个搞完了最后来个ldcofig -p就完成这一步了。
3.
yum install gcc-c++,what?这是必须的吗?答案是:“Yes, since 2012/08."
自从2012年8月某天之后,安装gcc就需要c++编译器了,至于为什么目前还没去探究,也许这也会成为后面的一次挖掘。安装gcc需要c++编译器,那些关于用c还是用c++的人还在拳来脚往的时候,时代已经悄悄地在改变了。下面是gcc社区上的对话:
(2013-05-21:非常感谢akisann的评论给予的信息帮助,指出了gcc安装之所以需要c++的原因,并提供了相应的参考资料,从提供的帖子内容很明确看到gcc那帮捣腾达人打算在gcc的开发中使用c++,但还是小心翼翼地在征询五湖四海侠客的意见,更不敢提起大规模使用。而从帖子的回复看到一场潜在骂战在酝酿,不过这都是接近3年前的事情了,看来在这里面有很多可以挖掘的有趣事物!)
(2013-05-24:经过上面的补充之后akisann给出第二弹的爆料(见3楼评论),非常感谢。这次的信息更加全面地解释了为何gcc要在实现代码中进行c++转换,尤其是提供资料中的第二条,把这个转换项目的背景和相关信息都详细写出来了。经过他(她,^o^)的资料补充,很多需要官方解释的事情已经非常明了,Mars也不在这里做多余的复制粘贴,信息也应该尽量复用呢!)
链接是 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54331
4.
配置并开始安装属于你的gcc 4.8.0吧,有可能一帆风顺,也可能危机四伏,下面是Mars的配置命令:
./configure --prefix=/home/software/gcc/4.8.0/ --with-gmp=/home/software/gmp/4.3.2/ --with-mpfr=/home/software/mpfr/2.4.2/ --with-mpc=/home/software/mpc/0.8.1/ --disable-checking --with-cpu=generic --build=x86_64-redhat-linux --disable-libunwind-exceptions --disable-multilib
最后Mars安装是成功了,希望各位也是!