在centos7等旧版linux上用国内源下载源码编译安装gcc并配置环境变量
Date: 2025-06-25
前言:
- centos7, ubuntu-18.04等已经EOL的系统已经不推荐用了,但是由于之前做的本地服务器一直用的是centos-7.9,稳定运行5年了,就不去换系统了
- 以下仅为个人环境下的记录,仅供参考,勿照抄使用
- 对于大多数不熟悉linux的用户,可以把这里的流程作为最佳实践,因为我写的方案本身就是企业级的解决方案和规划,基本都是基于官方文档的思路
- gcc版本可以自己去仓库中选择,能成功编译下来即可,无相应开发需求就无需纠结哪个版本
参考链接:
- gcc官网:https://www.gnu.org/software/gcc/
- gcc下载:https://ftp.gnu.org/gnu/gcc/
- 安装说明:Installing GCC - GNU Project
- gcc国内镜像:https://mirrors.aliyun.com/gnu/gcc/
本次目的用来解决类似这样的问题:
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
也就是系统自带的 libstdc++ 版本过低
## 查看当前可用的 GLIBCXX 版本
strings /usr/lib64/libstdc++.so.6 | grep ^GLIBCXX
解决:编译安装高版本gcc
(潜在问题:产生的文件数量是巨量的 13W+,编译耗时特别长 6核6线程也需要1小时以上)
## 可选:安装编译要用的依赖
yum install texinfo
GCC_VERSION=10.5.0
cd /data-nas/linux/files/download
wget https://mirrors.aliyun.com/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
tar -zxf gcc-${GCC_VERSION}.tar.gz
mv gcc-${GCC_VERSION} /data-nas/linux/software/_installation_dir/
cd /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
# 这里就是下载4个软件压缩包,国内没找到合适的镜像,可以开代理下载
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/data-nas/linux/software/gcc-${GCC_VERSION} --disable-multilib --enable-languages=all
make -j6
make install
# 最好顺手删掉编译的目录,文件数量太庞大了
rm -rf /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
由于gcc的bin和动态库等文件数量都比较多,而且可能会切换不同版本的gcc,因此本次不考虑做软链到_shortcut,而是直接添加环境变量,编辑 /etc/profile,添加内容如下:
## gcc PATH
GCC_VERSION=10.5.0
PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/bin:$PATH
CPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/include:$CPATH
LIBRARY_PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/lib64:/data-nas/linux/software/gcc-${GCC_VERSION}/lib:$LIBRARY_PATH
LD_LIBRARY_PATH=$LIBRARY_PATH
MANPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/share/man:$MANPATH
unset GCC_VERSION
export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH MANPATH
验证安装:
gcc --version
centos-release-scl(解决不了缺少动态库的问题)
参考链接:
- bash - How to properly upgrade gcc on Centos 7? - Super User
- ABI Policy and Guidelines
- gcc - GLIBCXX_3.4.21 not found on CentOS 7 - Stack Overflow
yum install -y centos-release-scl
安装后在 /etc/yum.repos.d 多2个repo文件,但是已经过期了,因此本次将其改为 中科大的SCL yum源:
https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/
将2个repo文件改为如下:
CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/$basearch/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
CentOS-SCLo-scl.repo
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/$basearch/sclo/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
配置完后,刷新缓存,然后安装:
yum makecache
## 查看有哪些版本
yum list available devtoolset-*
## 可以多安装几个版本
yum install devtoolset-11
yum install devtoolset-8

用法:
仅在当前shell中启用:
scl enable devtoolset-8 bash
gcc --version
每次登录shell都生效,那就往 ~/.bash_profile 中添加内容:
source /opt/rh/devtoolset-8/enable
删除:
yum remove devtoolset-8*
rm -rf /opt/rh/devtoolset-8
本文声明:
- 此文可能会存在排版、样式不美观,图片无法显示等问题
- 文章内容在原文永久链接中会定期更新,此文不做同步更新
- 限于篇幅长度限制,此文可能会有裁剪
建议阅读原文链接
在centos7等旧版linux上用国内源下载源码编译安装gcc并配置环境变量的更多相关文章
- CentOS7 编译安装nodejs,配置环境变量记录
每次都装,每次都查 阿里云备案了一个域名,续费了好多年,但是没钱买服务器,就挂在github上.今天收到消息:域名解析服务器不在阿里云,要被GG.只能咬牙买了个阿里云乞丐版. 所有服务都装好了,pin ...
- CentOS7 + Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 源码编译安装
一.安装Nginx 1.安装依赖扩展 # yum -y install wget openssl* gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng ...
- window 远程在Linux(centOS7.0)上安装JDK以及配置环境变量
本人是在windows 7 上安装了虚拟机,虚拟机安装的是linux(centOS7.0)系统现在在Windows 上安装SecureCRT 远程虚拟机的linux系统,安装JDK以及配置环境变量. ...
- centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版
zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- centos7源码编译安装lamp/lnmp
centos7源码编译安装lamp/lnmp 进程:是包工头(相当于是个门,只管开门关门,不管门内的事儿) 线程:是各种工种(cpu调度的是线程) 进程 是一件事情, 线程 是 同一个时间范围内 同时 ...
- Linux 从源码编译安装 OpenSSH
https://blog.csdn.net/bytxl/article/details/46639073 Linux 从源码编译安装 OpenSSH以及各问题解决 2015年06月25日 17:37: ...
- Linux 下源码编译安装 vim 8.1
前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...
- CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境
CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...
- Centos7.X 源码编译安装subversion svn1.8.x
说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...
随机推荐
- Delphi 时间控制窗口标题栏文字或任务栏标题文字滚动
1.定义一个全局变量保存显示到标题栏的字符串,strScroll: Widestring = '风行天下 - By WindSon '; 2.添加一个Timer控件,设置属性Interval := 3 ...
- 实现领域驱动设计 - 使用ABP框架 - 领域逻辑 & 应用逻辑
领域逻辑 & 应用逻辑 如前所述,领域驱动设计中的业务逻辑分为两部分(层):领域逻辑和应用逻辑: 领域逻辑由系统的核心领域规则组成,应用逻辑实现应用特定的用例 虽然定义很明确,但实现起来可能并 ...
- Random和猜数字小游戏
1.Random:使用方式和Scanner一样 Random用于生成随机数,括号里的10就是指在10以内随机生成一个数(0~9) Random生成的随机数都是从0开头 . 提问:那该如何让Random ...
- python的typer写cli脚本如此简单
# typer_demo.py import typer from pathlib import Path from typing import Optional from typing_extens ...
- ubantu&windows搭建gis开发环境(qt+osg+osgearth+osgqt)
一.ubantu22.04中搭建地图开发环境(qt5.15.2 + osg3.7.0 + osgearth3.7.1 + osgqt) (1)下载安装qt5.15.2 : (2)下载编译安装osg3. ...
- 附043.KubeEdge边缘云部署实施方案
目录 KubeEdge介绍 KubeEdge概述 KubeEdge优势 KubeEdge架构 KubeEdge部署 部署依赖 部署规划 主机名配置 变量准备 互信配置 环境预配置 安装keadm 设置 ...
- eclipse安装OpenExplorer插件--快速打开文件目录
eclipse安装OpenExplorer插件--快速打开文件目录功能: 1.下载: github: 下载地址:https://github.com/samsonw/OpenExplorer/down ...
- MySQL 中有哪些锁类型?
MySQL 中有哪些锁类型? 在 MySQL 中,锁是用于管理并发访问的机制,以保证数据一致性和完整性.MySQL 支持多种类型的锁,按照其粒度和用途可以分为以下几类. 1. 按粒度分类 表锁(Tab ...
- php 二维数组转成一维数组
// 1 $c = call_user_func('array_merge', $reds);// 2 $c = array_merge(...$reds);// 3 array_map(functi ...
- GitLab CI/CD 的配置文件 .gitlab-ci.yml 简介
〇.前言 .gitlab-ci.yml 文件主要用于项目的自动化部署配置,自动化可以大大提升团队效率,但同时这个文件的内容也比较复杂,弄清楚也并非易事,本文将对此文件的内容进行简单介绍,供参考. 另外 ...