最近使用老版本的gcc发现一些问题,于是想尝试升级。

看了一些教程之后进行尝试,发现各类教程均会有一些小问题,于是在此记录一下本人的过程。

编译过程中参考的文章有如下几篇,在此表示感谢:

http://blog.csdn.net/dyllove98/article/details/8917485

http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/05/2199530.html

http://www.linuxidc.com/Linux/2015-01/112595.htm

好了,下面进入正题。

1、准备工作

到gcc官方ftp下载自己需要的gcc版本,我下载的版本是4.7.4,同时也下载了4.9.3和5.3.0。

http://ftp.gnu.org/gnu/gcc/

先下载一个4.7.4版本的bz2压缩包,下载完毕后解压:

$ tar -xf gcc-4.7.4.tar.bz2
$ cd gcc-4.7.4

2、编译依赖库

代码下载完毕后,编译gcc时需要一些依赖库,其中gmp、mpfr、mpc是比较关键的库。这三个库要依次安装下载,下载的方式比较简单,如下一行代码搞定。

$ ./contrib/download_prerequisites

然后是编译这三个关键的库了(由于库的安装需要root权限,所以先切换到root权限):

(1)安装gmp4.3.2
# cd gmp
# ./configure --prefix=/usr/local/gmp
# make (编译)
# make install (执行安装)
(2)安装mpfr
# cd ../mpfr
# ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp(注意配置的时候要把依赖关系选项加进去)
# make
# make install
(3)安装mpc0.8.1
# cd ../mpc
# ./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
# make
# make install

  
 这里第3步的时候,可能会出现gmp库找不到的问题了,应该特别注意 --with命令前面是两个减法符号。

与此同时,如果仍然出现错误,建议设置一下环境变量 LD_LIBRARY_PATH,一个示例设置方法是在/etc/profile的最后,插入中间的几行代码,然后更新:

# vim /etc/profile
# LD_LIBRARY_PATH=/usr/local/gmp/lib:/usr/local/pfmr/lib:/usr/lib/mpc/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
# source /etc/profile

  

3、编译gcc

注意这里直接在gcc的代码目录下进行configure,否则可能引起gmp库找不到等问题或者被提示需要执行 make distclean。

为了加快编译速度,make命令后面,可以增加 -j16(数值16)表示线程数量,根据自己的机器设置,好一些的机器大概十五分钟可以编译完毕。

# ./configure --prefix=/usr/local/gcc-4.7.4 --enable-threads=posix --disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc
# make -j16
# make install

编译成功,没有什么错误提示,出现一些 Leaving directory的字样表明已经编译成功。

然后执行 make install即可。

安装的目录如下:

# make install
# ls /usr/local/gcc-4.7.4/
bin include lib lib64 libexec share

4、默认gcc版本的设置

参考这篇文章进行默认gcc的设置: http://www.linuxidc.com/Linux/2012-10/72284.htm

首先,查看原来的gcc所在的路径:

$ witch gcc

我的系统上,上述命令显示:/usr/bin/gcc,即原来的gcc命令在/usr/bin目录下。

为了能让原有的gcc仍然使用,将gcc/g++重命名一下:

# mv /usr/bin/gcc /usr/bin/gcc-4.4
# mv /usr/bin/g++ /usr/bin/g++-4.4

  

然后创建gcc的不同版本的可选链接(对g++的操作只需替换相应的gcc为g++即可):

# sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-4.7.4/bin/gcc 50
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-4.9.3/bin/gcc 40
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 30
# sudo update-alternatives --config gcc
共有 3 个程序提供“gcc”。 选择 命令
-----------------------------------------------
*+ 1 /usr/local/gcc-4.7.4/bin/gcc
2 /usr/local/gcc-4.9.3/bin/gcc
3 /usr/bin/gcc-4.4

  想删除某个选项的话,可以执行类似的指令

$ sudo update-alternatives --remove gcc /usr/bin/gcc-4.4

  update-alternatives指令的执行效果是为/usr/bin/gcc和/usr/bin/g++创建了一个链接:

gcc默认库的设置还需要修改环境变量,例如在 /etc/profile 中新增如下的代码,即增加默认搜索库目录为新版本下的gcc目录。

export GCC_DIR=/usr/local/gcc-4.9.3
LD_LIBRARY_PATH=${GCC_DIR}/lib64:${LD_LIBRARY_PATH}

  

CentOS 6.6x64下编译gcc-4.7.4的更多相关文章

  1. 不要着急改代码,先想想--centos 6.8下编译安装tmux

    诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...

  2. centos 6.x下编译dpdk 16.7 心得

    之前对dpdk编译了解得较少,之前直接就把centos yum update了,造成测试经理部署的centos 6.5升级为6.9,造成dpdk编译出错. 先说说centos 6.9下编译的心得: 1 ...

  3. 在CentOS 7.2下升级gcc编译器的版本

    默认情况下,CentOS 7.2预装的gcc版本是4.8.x,通过执行命令 gcc -v 可以看到,一般情况下这个版本的编译器已经满足需要了,但是某些特殊的时候为了支持C++更高的特性,需要对gcc编 ...

  4. Centos 7环境下编译mysql 5.7

    首先在编译之前,我们要了解相关mysql 5.7的编译选项,官网编译选项地址:http://dev.mysql.com/doc/refman/5.7/en/source-configuration-o ...

  5. [转][linux][centos]嵌入式 Linux下编译并使用curl静态库

    #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...

  6. CentOS 6.4下编译安装MySQL 5.6.14

    概述: CentOS 6.4下通过yum安装的MySQL是5.1版的,比较老,所以就想通过源代码安装高版本的5.6.14. 正文: 一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server ...

  7. CentOS 6.4下编译安装MySQL 5.6.14 (转)

    CentOS 6.4下通过yum安装的MySQL是5.1版的,比较老,所以就想通过源代码安装高版本的5.6.14. 正文: 一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm ...

  8. 0622 CentOS 6.4下编译安装MySQL 5.6.14

    转自http://www.cnblogs.com/xiongpq/p/3384681.html 概述: CentOS 6.4下通过yum安装的MySQL是5.1版的,比较老,所以就想通过源代码安装高版 ...

  9. CentOS 6.2下更新GCC

    在centos中安装了QT5.1.0,发现无法启动,原因好像是GCC版本问题,所以就更新GCC. 1.下载GCC源码: 下载网址:http://ftp.gnu.org/gnu/gcc/gcc-4.8. ...

随机推荐

  1. svn常用操作命令(不断更新中......)

      1.svn info显示本地或远程条目的信息.打印你的工作拷贝和URL的信息包括:路径.名称.URL.版本库的根.版本库的UUID.Revision.节点类型.最后修改作者.最后修改版本最后修改日 ...

  2. javascript简单笔记

    js有一个非常好用的内置处理小数点函数,a.toFixed(2). 调试代码常用:console.log(var); 返回上一级,并重新加载页面 window.location.href = docu ...

  3. js之createTextRange方法

    createTextRange()方法作用: 主要是用来对一些文本对象进行操作.比如你有一大段文字,都在同一个P标签内,但是你只希望通过JS改变其中的一小部分,这时就可以用createTextRang ...

  4. 如何获取SQL Server数据库元数据的方法

    发布时间:2007.06.15 05:05    来源:赛迪网    作者:3946469 元数据简介 元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据 ...

  5. 数据库中的DDL和DML语言

    "D:\mysql-5.6.22-winx64\bin"添加到系统环境变量path中了,然后在任意目录可访问mysql等命令,这样如登录等操作就不需要进入MySQL安装目录才好执行 ...

  6. JAVA_JSON_example

    package cn.kjxy.JSON; import java.util.List; import org.json.JSONArray; import org.json.JSONExceptio ...

  7. Flume连接Kafka的broker出错

    在启动Flume的时候,出现下面的异常,但是程序照样能运行,Kafka也能够收到数据,只是偶尔会断点. 2016-08-25 15:32:54,561 (SinkRunner-PollingRunne ...

  8. 关于php正则表达式模式修饰符

    一直以来,以为自己的正则表达式学的还算可以(基本工作上遇到的问题都能解决),但有时候却是知其然而不知其所以然,在网上看到这篇文章,解释了之前的很多疑问,记录下来,随时温故而知新. i (PCRE_CA ...

  9. 如何在Xilinx ISE中使用TCL提高工作效率

    http://wenku.baidu.com/link?url=jxtsPLGUlWwYuD8TtfWYYU_NhY5Qty3rx8ZDLCkINLe39JRGb90V5HoJhnkn9r_PQ6vZ ...

  10. C语言碰到的一元二次方程

    最近开始在学习C语言,看视频,是http://www.rjzxw.com/jc-74-1.html 碰到老师讲的一元二次方程例子,不懂,所以找了下资料,看了网上一元二次方程的视频(是自己太浮躁了,听不 ...