在Linux上编译安装gcc是个寻烦恼的活,对于像我这样习惯于在Windows上面使用二进制安装包的人来说,自已编译安装gcc是个相当大的挑战,今天直接挑战最新版的gcc,是4.9.2版本的,做之前查阅了大量的资料,本次安装使用的系统是CentOS6.4,自带的gcc是4.4.7版本,具体折腾过成如下:

准备工作,

  到GNU官方FTP下载GCC的源码包gcc-4.9.2.tar.gz.

  下载下面三个依赖的安装包,这三个包的版本在gcc-4.9.2/contrib/download_prerequisites脚本文件中有指明,按这个里面指定的版本下载即可:

    ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2

    http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2

    http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz

编译:

  首先是编译安装三个依赖库,按以下步骤编译安装:

    一:解压gmp-4.3.2.tar.bz2到自已指定的一个目录比如/home/[你的用户名]/gmp-4.3.2,另外在建一个/home/[你的用户名]/gmp-build目录,并进入这个目录,在终端里执行../gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2,--prefix表示后面将要安装到的目标位置,后面编译gcc时也要用到这个路径,执行完成之后在当前目录生成makefile文件,这时可以执行make(开始编译),接着执行make test(编译后安装前的测试,为了省时间,我一般没有执行这一步),最后执行make install(正式开始把编译好的文件安装到--prefix指定的位置).

    二:安装mpfr-2.4.2.tar.bz2,方法同上,不过执行configure的具体参数是这样的../mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2,它是要依赖前面的gmp.

    三:安装mpc-0.8.1.tar.gz方法同上,不过执行configure的具体参数是这样的../mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2

  上面三个依赖库安装好后,就可以开始编译安装gcc-4.9.2.tar.gz了:

    四:其实步骤同安装上面三个依赖库是一样的,还是执行configure的参数不同../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1,这里的参数是把上面的三个依赖库加上去了,执行完成之后同样是生成makefile文件.

    五:执行make -j4  (-j4是表示启动四线程,可以充分发挥四核CPU的性能,网上有人用四核CPU开启4线程编译只花了半个小时,不过我的电脑配置差,只执行的make花了三个多小时间,呵呵).

    六:make test (我为了省时间,基本上省略这一步了)

    七:make install (开始安装)

    至此就算编译安装完成了.

  其实在上面执行第五步的时候,会遇到这样的错误:“configure: error: cannot compute suffix of object files: cannot compile”,网上调查得到的原因是找不到上面三个依赖的lib位置,所以要在执行第五步之前,先执行这样一条指令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-4.3.2/lib:/usr/local/mpc-0.8.1/lib:/usr/local/mpfr-2.4.2/lib,这样就把三个依赖库就加入到了环境变量中,再编译的时候就不会报错了.

  装完后,查看一下版本

[guo@CentOS 桌面]$ g++49 -v
使用内建 specs。
COLLECT_GCC=g++49
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.9.2/libexec/gcc/i686-pc-linux-gnu/4.9.2/lto-wrapper
目标:i686-pc-linux-gnu
配置为:../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
线程模型:posix
gcc 版本 4.9.2 (GCC) 
[guo@CentOS 桌面]$ gcc49 -v
使用内建 specs。
COLLECT_GCC=gcc49
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.9.2/libexec/gcc/i686-pc-linux-gnu/4.9.2/lto-wrapper
目标:i686-pc-linux-gnu
配置为:../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
线程模型:posix
gcc 版本 4.9.2 (GCC) 
[guo@CentOS 桌面]$

CentOS编译安装GCC 4.9.2成功的更多相关文章

  1. CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置

    在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 今天在isocpp上看到"GCC 4.8.1 released, C++11 feature ...

  2. 转:在CentOS下编译安装GCC

    转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术  秋水逸冰  发布于: 2015-09-02  更新于: 2015-09-02  6519 次围观 ...

  3. CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1

    http://blog.163.com/zhu329599788@126/blog/static/6669335020161179259975 http://www.cnblogs.com/codem ...

  4. 在CentOS 6.4中编译安装gcc 4.8.1

    在CentOS 6.4中编译安装gcc 4.8.1 分类: C/C++ Linux/Unix2013-11-28 21:02 1877人阅读 评论(0) 收藏 举报 原文链接:http://www.c ...

  5. CentOS编译安装NodeJS+Express

    NodeJS是基于Chrome’s Javascript runtime,也就是Google V8引擎执行Javascript的快速构建网络服务及应用的平台,其优点有: 在CentOS编译安装Node ...

  6. 编译安装 gcc 4.9并验证使用

    编译安装 gcc 4.9并验证使用 1. 准备环境(GCC 编译器) centOS 6.3 cat /proc/version Linux version 2.6.32-279.el6.x86_64 ...

  7. nginx php-fpm安装配置 CentOS编译安装php7.2

    CentOS编译安装php7.2 介绍: 久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说.如果你是升级或新安装,那你首先需要考虑php7和程序是 ...

  8. CentOS6编译安装gcc高版本

    编译安装gcc高版本 因CentOS中gcc版本仅有4.4,故编译安装gcc高版本. 安装依赖库(如果你已安装过gcc低版本,可跳过这步) yum install glibc-static libst ...

  9. CentOS 7 安装 gcc 4.1.2

    CentOS 7 安装 gcc 4.1.2 0. 参考 在centOS7.2上编译gcc4.1.2 1. 安装了编译所需 yum groupinstall "Development Tool ...

随机推荐

  1. 关于c++中局部变量和全局变量的存储位置及内存回收机制

    局部变量,参数变量存放在栈中,当离开作用范围后,分配的内存在作用范围外会被系统自动回收. new出来的内存空间存放在堆中,不受作用域管理,不会被系统自动回收,只有在使用delete删除或者整个程序结束 ...

  2. leetcode 2 Add Two Numbers(链表)

    数字反过来这个没有什么麻烦,就是镜像的去算十进制加法就可以了,然后就是简单的链表. /** * Definition for singly-linked list. * struct ListNode ...

  3. 1057 Stack (30)(30 分)

    Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...

  4. CF510E. Fox And Dinner

    CF510E. Fox And Dinner https://codeforces.com/contest/510 分析: 由于\(a_i>2\), 相邻两个数一定一奇一偶,按奇偶建立二分图. ...

  5. 【JVM】java方法区

    java方法区[名词解析]        --->和java堆一样,方法区是一块所有线程共享的内存区域.        --->保存系统的类信息,比如,类的字段,方法,常量池等.      ...

  6. 【Caffe】Ubuntu 安装 Caffe gpu版

    安装环境:Ubuntu 16.04lts 64位, gcc5.4 gpu1050ti,cuda8.0,cudnn5.1.10 1. 安装依赖库 sudo apt-get install libprot ...

  7. XMPP群聊消息重复,自己收到自己发出的消息,群警告消息如何屏蔽

    在XMPP的"groupchat"中,创建群的时候会收到群发的"This room is locked from entry until configuration is ...

  8. Parallel Programming-多消费者,多生产者同时运行并行

    在上一篇文章演示了并行的流水线操作(生产者和消费者并行同时执行),C#是通过BlockingCollection这个线程安全的对象作为Buffer,并且结合Task来实现的.但是上一篇文章有个缺陷,在 ...

  9. HDU1257(简单DP)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. JVM体系结构之六:堆Heap之2:新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...