在CentOS下编译安装GCC

技术 秋水逸冰 55019浏览 17评论

我们知道,关于 GCC 在 CentOS 下通过 yum 安装默认版本号,CentOS 5 是 4.1.2;CentOS 6 是 4.4.7;CentOS 7 是 4.8.3。
很多时候在编译安装软件都需要高版本的 GCC,否则就会报错。
那么如何升级 GCC 的版本呢?

首先要确认升级到的 GCC 版本号。
目前 GCC 的最新版已经到了 5.2,而 CentOS 7 则依然使用其 4.8,所以基于兼容性考虑,我选择升级到 4.8.5。
GCC 官网:https://gcc.gnu.org

下面开始一步一步来编译安装 GCC 4.8.5,需要注意的是,在编译安装 GCC 之前,系统里必须先要通过 yum 安装老版本的 GCC 和依赖库。
如果是在 x86_64 系统下编译的话,还需要安装 libgcc.i686 glibc-devel.i686 才行。

yum install -y gcc texinfo-tex flex zip libgcc.i686 glibc-devel.i686

当然,如果是在 CentOS 5 x86_64 系统下安装,则是如下命令:

yum install -y gcc texinfo-tex flex zip libgcc.i386 glibc-devel.i386

同时需注意,编译安装 GCC 内存不小于 1GB,Swap 不小于 1GB,硬盘最低不小于 10GB,否则极有可能会中途报错退出。
编译安装完后,目录 gcc-4.8.5 将会有 5GB 之多。

1、下载源码

wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz

2、下载依赖包
编译安装 GCC 需要依赖 mpc,mpfr,gmp包。好在 GCC 源码里自带脚本可以轻松下载依赖包。

tar zxf gcc-4.8.5.tar.gz
cd gcc-4.8.5
./contrib/download_prerequisites

在此脚本里可以看到依赖包的版本号依次是 mpc-0.8.1,mpfr-2.4.2,gmp-4.3.2。

3、编译安装

mkdir gcc-build-4.8.5
cd gcc-build-4.8.5
../configure --prefix=/usr
make && make install

为了避免安装后系统里出现多个版本的 GCC,这里直接将编译安装的目录指定为 /usr,如果不指定 –prefix,则会默认安装到 /usr/local 下。
GCC 4.8.5 光是源代码就有105MB,因此可以预见整个编译过程需要很长时间(差不多 2 个小时左右)。

4、查看版本号

gcc --version
gcc (GCC) 4.8.5

g++ --version
g++ (GCC) 4.8.5

which gcc
/usr/bin/gcc

which g++
/usr/bin/g++

注:本次是在 CentOS 6.7 x86_64 下安装成功。

5、测试程序
cd ~
创建一个 main.cpp 文件,内容如下:

    #include <iostream>
    using namespace std;
    int main() {
        cout << "Hello world!" << endl;
        return 0;
    }

    
编译 main.cpp,执行如下命令:

g++ main.cpp -o main

执行生成的文件:
./main

输出如下:
Hello world!

写在最后
通过 rpm 命令查询 GCC 包的安装情况:
rpm -qa | grep gcc

输出如下:
gcc-4.4.7-16.el6.x86_64
libgcc-4.4.7-16.el6.x86_64
libgcc-4.4.7-16.el6.i686
gcc-c++-4.4.7-16.el6.x86_64

因此通过以上步骤编译安装 GCC 后,请慎用 yum update 或者通过 yum 来升级 GCC 的命令。

转载请注明:秋水逸冰 » 在CentOS下编译安装GCC

发表我的评论
取消评论

请输入正确答案后提交评论 *超出时限。 请再次填写验证码。

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (17)

  1. 如果系统没有安装bzip2的话,download_prerequisites会失败,所以最好在前面的yum后面加上bzip2。
    lalala6年前(2018-05-31)回复
  2. 目前,centos7自带的都是4.8版本,yum升级也没用,作者能写一篇centos7升级到gcc7.2版本的文章吗
    yutr48917年前(2017-11-18)回复
  3. 4.1.2没有download_prerequisites,弄起来好麻烦!
    TrojanSun8年前(2017-05-14)回复
  4. 仓库里面的版本过低,编译源码VPS资源不够,难道只有升级VPS这一条路了吗
    Alketo8年前(2016-07-14)回复
  5. 更新GCC后,yum update 会出现这样的错误 # gcc --version gcc (GCC) 4.8.5 Copyright © 2015 Free Software Foundation, Inc. 本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保; 包括没有适销性和某一专用目的下的适用性担保。 /sbin/ldconfig: /usr/lib64/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 清理 : device-mapper-event-libs-1.02.95-2.el6.x86_64 63/83 /sbin/ldconfig: /usr/lib/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 /sbin/ldconfig: /usr/lib64/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 清理 : device-mapper-1.02.95-2.el6.x86_64 64/83 清理 : device-mapper-libs-1.02.95-2.el6.x86_64 65/83 /sbin/ldconfig: /usr/lib/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 /sbin/ldconfig: /usr/lib64/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 清理 : udev-147-2.63.el6.x86_64 66/83 清理 : initscripts-9.03.49-1.el6.centos.x86_64 67/83 清理 : coreutils-libs-8.4-37.el6.x86_64 68/83 清理 : pam-1.1.1-20.el6.x86_64 69/83 /sbin/ldconfig: /usr/lib/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔数错误。 等等
    suhu9年前(2016-02-12)回复
    • 我说了嘛,手动升级 gcc 后要谨慎使用 yum update 了。
      秋水逸冰9年前(2016-02-12)回复
  6. 不知道这个评论解锁周末弄的
    SB9年前(2015-11-28)回复
  7. 最近怎么没更新文章呢
    su9年前(2015-11-17)回复
  8. 求做个deblocus一键安装脚本 *_*
    puppy9年前(2015-10-08)回复
  9. 秋大,居然换主题了啊,这个主题挺好看的,貌似头像 挂了哦
    xuzizzz9年前(2015-09-29)回复
    • 嗯,刚换的主题。 头像应该没挂啊,gravatar 的链接已改。
      秋水逸冰9年前(2015-09-29)回复
  10. gcc g++是否一样的?你懂得真多 c c++ py php 啥都会 。。
    果尚9年前(2015-09-26)回复
  11. 网站终于有手机版的了,手机浏览舒服一些了,不过同时又没了之前排在右边的文章推荐了。
    Python Swift9年前(2015-09-25)回复
    • 搞这个主题真是费劲。手机屏幕小,右边的小工具组件基本上也没显示的必要。
      秋水逸冰9年前(2015-09-26)回复
  12. 编译 GCC 真的会好麻烦
    ivmm9年前(2015-09-05)回复