参考:http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html

下载地址在这里:https://ftp.gnu.org/gnu/gcc

编译之前需要做准备工作。

yum -y groupinstall "Development Tools"
yum -y install zlib-devel

我用的是这个

../configure \
--prefix=/usr/local/gcc-6.2.0                                    \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++,go &&
make -j4
注:实际发现对gcc-6.2.0不能用make -j40,对gcc-6.3.0用make -j20是可以的。

编译gcc-6.4.0时,似乎用 -j12是可以编译的。

网页上的命令是:

../configure                                         \
--prefix=/usr \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make

有的语言不需要,我就删掉了。保留go,是为了将来和erlang做比较。

结果编译出现问题,但以前有一次,没有用make -j4,用make编译

是成功的。

按照错误提示,删除一些东西,反复尝试几次,经过对个别目录make,最后解决问题。

编译提示需要 gmp,mpfr和mpc,通过yum方式安装:

yum -y install gmp-devel
yum -y install mpfr-devel
yum -y install libmpc-devel

似乎libmpc-devel依赖前两个,安装这个的时候,前两个也被安装了。

不采用这种方式安装gmp, mpfr和mpc,可以通过https://www.mawenbao.com/note/install-gcc-5.2.0-from-source.html 提示的来编译安装。

就是: make -j4时出现了问题,然后需要解决个别问题,用make来解决。以后再次编译的时候,
1. 需要先make distclean, and/or rm ./config.cache
2. 编译时,如果可以利用晚上时间编译,就make, 不加 "-j4"。

如果提示类似于“../../mpfr/mpfr.h:334:55: error: expected ‘)’ before ‘mpfr_rnd_t’”一类的错误,那么可能是yum安装的gmp,mpfr或者

libmpc版本不适合本次编译,可以执行:

sh contrib/download_prerequisites 来把依赖项准备好。编译的时候,会编译这些依赖项的。

要容许多个gcc版本存在,可以把原来的/usr/bin/gcc改为/usr/bin/gcc4.4.7(我的版本是这个),然后在/usr/local/bin写gcc6.2.sh和gcc4.7.sh,内容分别是

ln -sf /usr/local/gcc-6.2.0/bin/gcc /usr/bin/gcc
....

这样的内容。

gcc6.4.0是6系列里版本最高的, https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.gz。

编译完gcc-6.3.0,测试发现,说是运行时,version `GLIBCXX_3.4.22' not found。 因为make install时,没有把libstdc++.so.6.0.22拷贝到/usr/lib64下。

应该拷贝过去,另外把libstdc++.so.6重新链接下。另一个方法是把安装的目录:/usr/local/gcc-6.3.0/lib64 给放到 /etc/ld.so.conf下或者/etc/ld.so.conf/xxxx中。

可以用"strings /usr/lib64/libstdc++.so.6 | grep GLIBC" 来查看。

gcc 8.2.0的编译如下:

Installing latest major version of gcc: gcc 8 (GCC 8.2.0) - released 07/26/2018:

GCC 8.2 is a bug-fix release for gcc 8.1.0, containing substantial new functionality not available in GCC 7.x or previous GCC releases.

Download file: https://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gz

Compile and install:

//required libraries:
yum install libmpc-devel mpfr-devel gmp-devel -y

yum install zlib-devel*

./configure --prefix=/usr/local/share/gcc-8.2.0 --with-system-zlib --disable-multilib --enable-languages=c,c++

make -j 8 <== this may take around 75 minutes or less to finish with 8 threads
(depending on your cpu speed)

make install

提醒一下,这个有人 make -j 8 在8核机器上要花75分钟,我请系统管理员在虚拟机上调成了30个核,这下编译就非常快了。但这样编译,出现过3次错误。最后改为:-j 10就编译成功了。

用这个gcc编译时,发现gcc 8或gcc 7的版本对于下面的错误没法解决,遍寻google也没有好办法。

error: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 84 [-Werror=format-truncation=]

以后发现能解决了,Makefile中增加:

ifeq ($(shell test $(GCC_VERSION) -ge 70 && echo 1), 1)
CFLAGS +=-Wno-format-truncation
endif

最后说一下make -j 的事情。编译gcc-6.4.0时,make -j30出错,改为make -j10, make -j4,还是有错误;出现错误后,make 也不行。趁着晚上,make clean && make,第二天过来看,编译成功了。18点开始编译,22点编译结束,机子是一个cpu的虚拟机。实际操作的时候怎么办呢,就是准备两个同样的目录,一个就make,另一个make -jxx。

说说不通过编译用yum的方式

The best approach to use yum and update your devtoolset is to utilize the CentOS SCLo RH Testing repository.

yum install centos-release-scl-rh
yum --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc devtoolset-7-gcc-c++
Many additional packages are also available, to see them all

yum --enablerepo=centos-sclo-rh-testing list devtoolset-7*

该方法之在centos6上成上能成功,在centos7上,有的能成功,最近是没有成功。


gcc 6.2.0/6.3.0/8.2.0 编译安装的更多相关文章

  1. 64位win10+cuda8.0+vs2013+cuDNN V5下Caffe的编译安装教程并配置matlab2014a 接口

    一.需要安装的软件 1)vs2013,我是在http://www.52pojie.cn/thread-492326-1-1.html这个网址安装的.我之前用的是vs2012,按照网上的配置教程会爆各种 ...

  2. CentOS7 编译安装 Mongodb (实测 笔记 Centos 7.0 + Mongodb 2.6.6)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  3. CentOS7 编译安装 Nginx (实测 笔记 Centos 7.0 + nginx 1.6.2)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  4. Zabbix 3.0编译安装

    环境准备Centos 6.X 数据库准备默认centos yum源中mysql包的版本号为5.1,为了能使zabbix 3.0能达到最好的性能效果,安装最新版的mysql数据库. yum list i ...

  5. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

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

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

  7. Linux/RedHat 编译安装GNU gcc 4.9.0 (g++)

    这里说的是编译安装,yum/apt-get 等安装方法比較简单,不阐述! 1.下载源代码包:gcc.gnu.org 2.解压: tar -xjvf gcc-4.9.0.tar.bz2 3.下载编译所需 ...

  8. 编译安装GCC 5.2.0

    https://blog.atime.me/note/install-gcc-5.2.0-from-source.html 记录编译GCC 5.2.0时遇到的问题和解决方法,以备日后查询. 平时使用的 ...

  9. gcc 5.2.0 编译安装笔记-20151110

    **转载请注明出处** by.haunying3 系统版本号 CentOS-6.6-x86_64-minimal 编译器 gcc-4.4.7通过yum安装 rpm -qa | grep gcc gcc ...

随机推荐

  1. zynq里面的AXI总线(2017-1-11)

    在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议.其中三种AXI总线分别为: AXI4:(For high-performance memory-mapped requir ...

  2. 160道Java技术面试题

    1.面向对象的特征有哪些方面?2.访问修饰符public,private,protected,以及不写(默认)时的区别?3.String 是最基本的数据类型吗?4.float f=3.4;是否正确?5 ...

  3. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  4. Django:模板template(二)

    将跨站请求伪造和验证码的东西记一下 CSRF Cross Site Request Forgery.跨站请求伪造 链接:GET请求:表单:POST请求 某些恶意的网站上,包含链接.表单.按钮.Java ...

  5. 创建ReactNative的iOS项目

    http://reactnative.cn/docs/integration-with-existing-apps/ 1.安装好ReactNative开发环境 2.安装好CocoaPods 3.创建项 ...

  6. utf-8 utf8

    mysql> DROP TABLE IF EXISTS student; Query OK, 0 rows affected (0.00 sec) mysql> create table ...

  7. wpf(windos窗体)

    在windos窗体中可以放置各种控件,以及为控件定义事件等等,而窗体的显示可以通过show方法以及showdialog方法.他们的区别是 show:运行程序的时候弹出新窗体,而该新窗体会一闪而过,最小 ...

  8. DBGridEh表尾显示合计 .....

    设置如下就可以了..... FooterRowCount  : 1 SumList--------Active:=true 双击 DBGridEh  加入所需要的列....然后在 需要合计的..... ...

  9. SQL查询优化:详解SQL Server非聚集索引(转载)

    本文是转载,原文地址 http://tech.it168.com/a2011/1228/1295/000001295176.shtml 在SQL SERVER中,非聚集索引其实可以看作是一个含有聚集索 ...

  10. commonjs模块和es6模块的区别?

    commonjs模块和es6模块最主要的区别:commonjs模块是拷贝,es6模块是引用,但理解这些,先得理解对象复制的问题,在回过头来理解这两模块的区别. 一.基本数据类型的模块 ./a1.js ...