centos7 升级 gcc 版本

article/2025/10/24 13:41:34

GNU Mirror List

查看动态库版本

strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

查找gcc生成的最新动态库

find / -name "libstdc++.so*"

一、升级 gcc:

1、查看当前gcc版本

#默认4.8.5
g++ -v 或者 gcc --version

2、下载gcc源码(10.2.0)

wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz

3、解压安装包

tar -xvf gcc-10.2.0.tar.xz

4、下载依赖库

cd gcc-10.2.0
./contrib/download_prerequisites

在这里插入图片描述

5、安装系统必须包模块

## 编译常用软件包
yum install -y gcc-c++ libstdc++-static ant cmake byacc flex automake libtool binutils-devel bison ncurses-devel gcc kernel-devel libtool libatomic libcurl-devel texinfo

6、生成Makefile文件

./configure --prefix=/usr/local/gcc-10.2.0 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib

7、编译

make -j4

8、安装

make install

9、配置libstdc++.so

查看libstdc++.so

find / -name "libstdc++.so*"

在这里插入图片描述

进入libstdc++.so配置目录

 cd /usr/lib64
#备份
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
mv /usr/lib64/libstdc++.so /usr/lib64/libstdc++.so.bakmv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
mv /usr/bin/c++ /usr/bin/c++485
mv /usr/bin/cc /usr/bin/cc485#创建新软连
ln -s /usr/local/gcc-10.2.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-10.2.0/bin/g++ /usr/bin/g++
ln -s /usr/local/gcc-10.2.0/bin/c++ /usr/bin/c++
ln -s /usr/local/gcc-10.2.0/bin/gcc /usr/bin/ccln -s /usr/local/gcc-10.2.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc-10.2.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so
# 验证
gcc --version

方法二:

https://mirrors.aliyun.com/centos-vault/7.5.1804/sclo/x86_64/rh/https://mirrors.aliyun.com/centos/7.9.2009/sclo/x86_64/rh/Packages/d/

CentOS 7官方源的gcc最新版本是4.8.5,发布于2015年,年代久远且不支持c++14。要编译c++14及以上项目,必须要升级现有版本或者安装高版本的gcc。红帽其实已经编译好了高版本的gcc,但未更新到base和epel这两个常用源中,而是将这些版本放在scl中。
在这里插入图片描述
在这里插入图片描述
##列出GCC版本
yum list |grep devtoolset |grep gcc.x86_64

在这里插入图片描述

1、安装centos-release-scl

sudo yum install centos-release-scl

2、 安装devtoolset,

注意,如果想安装7.版本的,就改成devtoolset-7,以此类推

sudo yum install devtoolset-8*

3、 激活对应的devtoolset,

所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本

# 官方推荐的加载命令
scl enable devtoolset-8 bash# 第2种 执行安装软件自带的脚本,可以写入启动脚本中
source /opt/rh/devtoolset-x/enable #x为要启用的版本。
gcc -v

这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作
首先,安装的devtoolset是在 /opt/rh 目录下的,
每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行

source ./enable

4、 直接替换旧的gcc

旧的gcc是运行的/usr/bin/gcc

mv /usr/bin/gcc /usr/bin/gcc-4.8.5ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gccmv /usr/bin/g++ /usr/bin/g++-4.8.5ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++gcc --versiong++ --version

二、升级 gdb

下载镜像

2.1 获取

wget https://ftp.gnu.org/gnu/gdb/gdb-8.3.1.tar.gz

2.2 编译

cd gdb-8.3.1/
./configure
make -j4
make install

建议在安装gcc前,先装gdb的升级,gdb的升级不能用太高版本的gcc编绎,或者在编绎时指定低版本的gcc。
CC=/usr/local/gcc/bin/gcc ./configure

三、升级 cmake

install

3.1 获取CMake源码包

 wget https://cmake.org/files/v3.16/cmake-3.16.9.tar.gz

3.2 解压

tar xvzf cmake-3.16.9.tar.gz

3.3 编译安装

cd cmake-3.16.9/
./bootstrap --prefix=/usr/local/cmake
make -j4 
# 卸载旧版本
yum remove cmake -ymake install

3.4 配置

vi /etc/profile
#增加一行:
export PATH=$PATH:/usr/local/cmake/bin

gcc/g++ 头文件和库文件搜索路径

gcc/g++ 头文件和库文件搜索路径

一、GNU Make

GNU Make官网

DOC

GNU Make是一个工具,它可以控制从程序的源文件生成可执行文件和其他非源文件。

二、configure 配置选项

-help

输出帮助信息.即使是有经验的用户也偶尔需要使用使用’–help’选项,因为一个复杂的项目会包含附加的选项.例如,GCC包里的’configure’脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项.

–prefix=$Home/cdvs_bin_for_arm

这里是最终生成可执行文件的安装目录也就是exe的存放目录。可以根据自己的需要调整。

libstdc++

libstdc++GCC对 C++ Standard Library 的实现。

libc++clang的实现。

libsupc++libstdc++的子集,可以在github找到libsupc++,它是libstdc++的一个子文件夹:
在这里插入图片描述
libsupc++包含C++最核心的一部分功能,比如:

内存分配:operator new, operator delete等
异常处理
run-time type information (RTTI):dynamic_cast,typeinfo类等
初始化列表:定义了template initializer_list

常见错误:

1、xgcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory

g++ --versiongcc --version

没有版本号的话下载

有的话

运行:

find / -name "cc1plus"  

在这里插入图片描述
添加到环境变量:

export PATH="$PATH:/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/"

2、 /usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-32.h: No such file or directory

64位linux 提示这个问题
这个问题是由于缺少32位兼容包,解决办法:

Ubuntu:sudo apt-get install libc6-dev-i386

CentOS:yum -y install glibc-devel.i686

3 Linux中Rust 报错linker ‘cc’ not found

  1. 是因为 gcc 没有装

  2. 还有一种情况就是软链接被移除,
    重新建立软链接

ln -s gcc cc

4、Rust编译libclang错误

错误:thread ‘main’ panicked at 'Unable to find libclang: "the libclang shared library at /usr/lib64/clang-private/libclang.so.7 could not be opened
解决:

$ rpm -qa | grep "llvm-private"
$ rpm -e --nodeps llvm-private-7.0.1-1.el7.x86_64
$ yum install -y clang llvm

错误:thread ‘main’ panicked at 'libclang function not loaded: clang_getTranslationUnitTargetInfo. This crate requires that libclang 3.9 or later be installed on your system, clang版本过低了,centos 7默认是3.4
解决:

$ yum install llvm-toolset-7
$ scl enable llvm-toolset-7 bash #激活clang并检查版本,clang相关依赖已经全部安装了

LLVM架构

深入理解 LLVM架构


http://chatgpt.dhexx.cn/article/CoZhNTJF.shtml

相关文章

环境搭建—3.0 Linaro gcc

一、gcc gcc,GNU Compiler Collection,GNU编译器套件,它最初是专门给GNU操作系统开发的,随着时间推移,现在已经成为了嵌入式领域应用最广泛的c/c编译器工具。不管是单片机开发还是linux开发,都离不开gcc。主…

mac使用gcc编译器

mac自带的编译器是clang编译器而且自带的gcc是映射到clang的之前看到网上需要关闭SIP模式很烦,我试了试关闭了也删除不了gcc,也无法软链接。 后来找到一篇曲线救国的帖子,是在~目录下使用的。 首先下载gcc的最新版本&#xff0c…

win10下安装gcc

win10下安装gcc 一、gcc是什么?1.1、安装gcc 第一次安装,记录一下 一、gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc、libgcj等等)。GCC的初…

gcc

gcc:一个工具集合,包含预处理器,编辑器,汇编器,链接器等组件 说明:当不使用任何选项时,gcc将会生成一个名为a.out的可执行文件 gcc选项 gcc -E 预处理 .igcc -S 编译成汇编代码 .sgcc -c 汇编成目标代码 .ogcc -o 链接成可执行代码 .out/.…

GCC,G++介绍

1.什么是GCC GCC 原名为 GNU C语言编译器(GNU C Compiler)GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言 译器。GNU 编译器套件包括C、C、Objective-C、Java、Ada 和 Go 语言前 端,…

tdm gcc怎么运行c语言,TDM-GCC 64位

TDM-GCC 是为windows系统打造的编译器套件,包括了自由并开源的 MinGW 或 MinGW-w64 的运行时 APIs,当GCC创建一个新的版本,TDM构建二进制包在MinGW环境中使用MinGW的官方GCC软件包的替代品。需要的朋友可以下载! TDM-GCC安装教程 …

什么是GCC? GCC编译过程

什么是GCC? 最简单的回答就是Linux 下的C/C 编译器。 其实一开始的确是这样的,GCC 原名为GUN C 语言编译器( GNU C Compiler), 原本只能处理编译C语言。 但是后来GCC发展壮大了,可以编译C, Fortran,Pascal,Objective-C, Java,A…

GCC是什么

GCC是什么 说到 GCC,就不得不提 GNU,“GNU”是“GNUs Not Unix!”(GNU并非Unix!)的首字母递归缩写,中文名“革奴计划”。GNU 计划的最终目标是打造出一套完全自由(即自由使用、自由更改、自由发…

GCC简介

一. GCC简介 GCC(GNU C Compiler)原名GNU C语言编译器,是由GNU开发的编程语言译器,只能处理C语言。但其很快扩展,变得可处理C,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective…

一张图学会python递归函数

递归函数属于那种“难者不会,会者不难”的事情,回想自己大学时学习递归函数的经历,简直是痛不欲生,代码里没有一行是看不懂的,但就是理解不了它是怎样运行的。 等到自己悟通了原理,就又会觉得这东西太简单了…

【Python递归练习】

1.出售金鱼问题第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼。问…

python 递归函数详解

在 python中,有一种非常神奇的函数:递归函数,它可以让你的程序实现自顶向下的递归调用,从而实现程序的无限循环。这是一种非常神奇的语言,可以让你使用一种语言实现另一种语言。它还有一个很酷的名字: shel…

python函数递归求和详解_Python递归函数详细分析

什么是递归? 递归,就是在函数运行中自己调用自己 代码示例: def recursion(n): # 定义递归函数 print(n) # 打印n recursion(n1) # 在函数的运行种调用递归 recursion(1) # 调用函数 这个函数在不断的自己调用自己,每次调用n1,看下运行结果: 1 2 ..... 998Tracebac…

Python递归思想与代码实现

1, 递归思想 递归算法:递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 这是官方的解释,翻译成人话就是: 函数内部自己调用自己函数必须有出口 函数自己调用自己很好理解&#xff0c…

python函数递归调用时对深度没有限制_python递归深度

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 今天在写爬虫的时候,发现了一个事情,使用str方法强制转换一个beautifulsoup对象成字符串的时候报错了,提示是“maximum recursion depth exceeded while cal…

python递归函数详解

python递归函数是指一个函数从一个状态开始,然后返回另一个状态。递归函数是在实现过程中遇到的最基本的一类函数。比如, int i0; int j0; int c1;等等都是一类递归函数,但是我们知道,它们在实现过程中需要执行多次,并…

Python 递归的优化

文章目录 前言一、递归实现斐波那契二、优化后的斐波那契总结 前言 递归,很常见的一种算法,在初学的时候我们都会用递归来解决斐波那契数列,但递归本身有非常大的缺陷,就是时间和空间占用都非常大,在进阶学习后&#…

Python 递归实现乘法

Python定义函数:使用递归求乘积(x*y) 1 当作x个y相加或者y个x相加 2 当其中一数(以x为例)不为1时,返回y加上该函数,同时每次x-1,直至x1为止,此过程实现了x个y相加 具体代码如下:

python递归遍历查询文件 文件夹

文章目录 🍗先看运行效果🍔 具体思路🍟 一、主要使用的模块以及方法🌭 二、主要思路以及代码🍿 1、开始位置🧂 2、关键位置🥓 3、结果输出 🧇 完整源码🥞 结尾&#x1f9…

轻松搞懂Python递归函数的原理与应用

递归: 在函数的定义中,函数内部的语句调用函数本身。 1、递归的原理 学习任何计算机语言过程中,“递归”一直是所有人心中的疼。不知你是否听过这个冷笑话:“一个面包,走着走着饿了,于是就把自己吃了”。 常理推断&…