【系统软件01】devtoolset离线安装gcc

2023-10-09 05:50

本文主要是介绍【系统软件01】devtoolset离线安装gcc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【系统软件01】devtoolset离线安装gcc

  • 一、SCL简介
  • 二、SCL源安装
  • 三、离线下载devtoolset
    • 1、Developer Toolset
    • 2、下载devtoolset-9
    • 3、压缩devtoolset-9
  • 三、离线安装devtoolset-9(gcc9.3)
    • 1、解压devtoolset-9.tar.gz
    • 2、安装devtoolset-9
  • 四、设置环境变量(使用gcc9.3)
    • 1、当前窗口生效
    • 2、当前用户永久生效
    • 3、所有用户永久生效(重启系统生效)
    • 4、验证
  • 四、使用devtoolset安装gcc存在的问题
    • 1、libc.so用的还是旧版本的——GLIBC还是旧版本的
    • 2、libstdc++.so用的还是旧版本的——GLIBCXX还是旧版本的
    • 3、libc++ 与 libstdc++ 是什么关系?
    • 4、libc.so是什么
  • 四、如何替换系统自带的gcc(不建议你这么做)
  • 五、SCL常用软件集
  • 六、SCL使用
  • 七、建议使用devtoolset安装gcc?还是源码编译gcc?

一、SCL简介

SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS Linux用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。

参考:
1、Linux开发环境——SCL软件集
2、转载:Centos7安装SCL源
3、CentOS 使用 IUS / SCL 第三方软件源
4、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

二、SCL源安装

  • 1、SCL源安装
yum -y install centos-release-scl
  • 2、查看安装的scl源
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ls
CentOS-Base.repo       CentOS-Media.repo        CentOS-Vault.repo
CentOS-CR.repo         CentOS-SCLo-scl.repo     CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo  CentOS-SCLo-scl-rh.repo
CentOS-fasttrack.repo  CentOS-Sources.repo
[root@localhost yum.repos.d]# 

三、离线下载devtoolset

1、Developer Toolset

Developer Toolset是为CentOS和REHL Linux平台开发者设计的开发工具集,提供GCC工具集、GNU Debugger以及其它开发、调试、性能测试工具的不同版本。

  • Developer Toolset 3、Developer Toolset 4、Developer Toolset 6已经废弃。

  • 从上面的镜像源中我们可以看到,目前维护的版本是:Developer Toolset 7、Developer Toolset 8、Developer Toolset 9、Developer Toolset 10、Developer Toolset 11

  • Developer Toolset 7 - Developer Toolset 11,分别对应gcc7-gcc11

我们下面以安装gcc9.3为例,其他可维护的版本与此相同。

2、下载devtoolset-9

下载devtoolset-9,也就是gcc9.3版本

yum -y install --downloadonly --downloaddir=devtoolset-9  devtoolset-9

or

yum -y install --downloadonly --downloaddir=devtoolset-9 devtoolset-9-*

or

yum -y install --downloadonly --downloaddir=devtoolset-9 devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 

–downloadonly表示仅仅下载
–downloaddir=devtoolset-9表示下载目录的文件夹名字是devtoolset-9

备注:下载devtoolset-9的机器,必须和不联网的机器使用的centos系统相同。否则离线安装的过程可以会出现失败。

3、压缩devtoolset-9

tar -czvf devtoolset-9.tar.gz devtoolset-9

在这里插入图片描述

三、离线安装devtoolset-9(gcc9.3)

把devtoolset-9.tar.gz拷贝到不联网的电脑。

1、解压devtoolset-9.tar.gz

tar -xzvf devtoolset-9.tar.gz

2、安装devtoolset-9

进入解压的devtoolset-9,安装devtoolset-9

cd devtoolset-9
rpm -Uvh *.rpm

四、设置环境变量(使用gcc9.3)

1、当前窗口生效

scl enable devtoolset-9 bash

or

source /opt/rh/devtoolset-9/enable

以上只有在当前窗口生效,在其他窗口无效。

2、当前用户永久生效

在~/.profile末尾假如以下1行

source /opt/rh/devtoolset-9/enable

3、所有用户永久生效(重启系统生效)

  • 方法一:(重启系统生效)
    打开/etc/profile.d/devtoolset.sh 文件:
    把以下内容加入文件

cd /etc/profile.d
vi devtoolset.sh

source /opt/rh/devtoolset-9/enable
  • 方法二:(重启系统生效)
    在/etc/profile文件末尾加入以下1行

cd /etc
vi profile

source /opt/rh/devtoolset-9/enable
  • 方法三:命令行执行(重启系统生效)
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

4、验证

which gcc
gcc -v

在这里插入图片描述

四、使用devtoolset安装gcc存在的问题

1、libc.so用的还是旧版本的——GLIBC还是旧版本的

  • 查找libc.so*
[root@localhost ~]# find / -name libc.so*
/usr/lib/x86_64-redhat-linux6E/lib64/libc.so
/usr/lib64/libc.so.6
/usr/lib64/libc.so
/opt/rh/devtoolset-9/root/usr/share/ltrace/libc.so.conf
[root@localhost ~]
  • 查看系统自带的libc.so.6
    发现最新的是GLIBC_2.17
[root@localhost ~]# ls -l /usr/lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Jun 25 09:41 /usr/lib64/libc.so.6 -> libc-2.17.so
[root@localhost ~]# strings /usr/lib64/libc.so.6 |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE
___sys_nerr_GLIBC_2_3
___sys_nerr_GLIBC_2_4
___sys_nerr_GLIBC_2_1
  • 如何使用高版本的GLIBC?
    既然devtool并不会升级GLIBC,如果我们需要使用高版本的GLIBC怎么办?
    解决方案:源码编译glibc对应版本,然后创建软连接。——具体可以参考我之前写的博客

2、libstdc++.so用的还是旧版本的——GLIBCXX还是旧版本的

  • 查找系统中的libstdc++.so
[root@localhost dev1]# find / -name libstdc++.so*
/home/dev1/vmware-tools-distrib/lib/lib64/libstdc++.so.6
/home/dev1/vmware-tools-distrib/lib/lib64/libstdc++.so.6/libstdc++.so.6
/home/dev1/vmware-tools-distrib/lib/lib32/libstdc++.so.6
/home/dev1/vmware-tools-distrib/lib/lib32/libstdc++.so.6/libstdc++.so.6
find: ‘/run/user/1000/gvfs’: 权限不够
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so
/usr/lib/vmware-tools/lib64/libstdc++.so.6
/usr/lib/vmware-tools/lib64/libstdc++.so.6/libstdc++.so.6
/usr/lib/vmware-tools/lib32/libstdc++.so.6
/usr/lib/vmware-tools/lib32/libstdc++.so.6/libstdc++.so.6
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++.so
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/libstdc++.so
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
[root@localhost dev1]
  • 查看系统自带的libstdc++.so.6
    发现使用devtool安装后,libstdc++依然是系统原有的GLIBCXX_3.4.19

[root@localhost dev1]# ls -l /usr/lib64/libstdc++.so.6
lrwxrwxrwx. 1 root root 19 719 2021 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
[root@localhost dev1]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@localhost dev1]# 
  • 如果要使用高版本的GLIBCXX怎么办?
    解决方案:源码方式编译gcc,因为源码编译安装gcc的方式,会自带高版本的GLIBCXX,也就是高版本的libstdc++。

3、libc++ 与 libstdc++ 是什么关系?

libc++和libstdc++都是C++标准库的实现,两者都提供了相同的C++标准库功能,包括容器、算法、迭代器、输入输出等等。但是,它们是由不同的团队开发并维护的,也有着不同的设计理念和实现方式。本文将详细介绍这两个库的特点和区别,以及它们之间的关系。

首先,让我们来了解一下libc++和libstdc++的基本情况。libc++是由苹果公司开发和维护的C++标准库实现,旨在提供一个更加现代化和高效的C++标准库。它的设计理念是利用C++11和C++14中的新特性,尽可能地避免使用C++03中的一些问题和不足之处。libc++使用了更加现代化的编程风格和技术,比如使用C++11中的move语义和智能指针等等。libc++在macOS、iOS、watchOS等苹果生态系统中被广泛使用。

而libstdc++则是由GNU项目组开发和维护的C++标准库实现,也是GCC编译器的默认标准库。它的设计理念是充分利用C++03中的特性,尽可能地支持标准C++03规范。libstdc++的实现方式和设计思路与libc++有所不同,比如它更多地使用了指针和传统的C++语言特性。

参考​libc++ 与 libstdc++ 是什么关系?

4、libc.so是什么

libc.so 是 Linux 系统中的 C标准库(C standard library)的动态链接库文件。它是C语言程序开发中的核心库之一,提供了许多常用的函数和工具,用于实现各种基本的操作,如字符串处理、内存分配、文件操作等。

C标准库包含在应用程序开发中经常使用的函数,这些函数已经被编写好并进行了优化,可以方便地在应用程序中调用。libc.so 动态链接库在程序运行时加载到内存中,并提供了这些函数的实现。

常见的一些 libc.so 函数包括:
字符串操作函数:如 strcpy、strcat、strlen 等。
内存分配函数:如 malloc、free、calloc 等。
文件操作函数:如 fopen、fclose、fwrite、fread 等。
时间和日期函数:如 time、strftime 等。
数学函数:如 sin、cos、sqrt 等。
通过使用 libc.so 提供的这些函数,开发者可以更加高效地编写应用程序,并利用标准库的功能来简化开发过程。

值得注意的是,动态链接库的名称可能因操作系统和版本而异。在某些系统上,libc.so 可能被称为 libc.so.6 或其他类似的名称,其中的数字表示库的版本。这些库文件通常位于系统的标准库路径下,开发者可以通过链接器将它们与应用程序进行关联,以便在运行时调用库中提供的函数。

四、如何替换系统自带的gcc(不建议你这么做)

截止目前,系统有两个gcc,一个系统自带的gcc4.8.5,另外一个就是我们刚刚安装配置的gcc9.3了,是否有办法把系统自带的gcc4.8替换成高版本的gcc9.3呢,答案是可以的。方案就是,把原有的gcc备份,并建立新的软链接。

  • 把系统原有的gcc、g++、c++备份
cd usr/bin
mv gcc gcc.bak
mv g++ g++.bak
mv c++ c++.bak
mv cc cc.bak
mv cpp cpp.bak
mv gcc-nm gcc-nm.bak
mv gcc-ar gcc-ar.bak
mv gcc-ranlib gcc-ranlib.bak
  • 建立软链接gcc、g++、c++
ln -sv /opt/rh/devtoolset-9/root/usr/bin/gcc /usr/bin/gcc
ln -sv /opt/rh/devtoolset-9/root/usr/bin/g++ /usr/bin/g++
ln -sv /opt/rh/devtoolset-9/root/usr/bin/c++ /usr/bin/c++
ln -sv /opt/rh/devtoolset-9/root/usr/bin/cc /usr/bin/cc
ln -sv /opt/rh/devtoolset-9/root/usr/bin/cpp /usr/bin/cpp
ln -sv /opt/rh/devtoolset-9/root/usr/bin/gcc-nm /usr/bin/gcc-nm
ln -sv /opt/rh/devtoolset-9/root/usr/bin/gcc-ar /usr/bin/gcc-ar
ln -sv /opt/rh/devtoolset-9/root/usr/bin/gcc-ranlib/usr/bin/gcc-ranlib

五、SCL常用软件集

  1. Developer Toolset

Developer Toolset是为CentOS和REHL Linux平台开发者设计的开发工具集,提供GCC工具集、GNU Debugger以及其它开发、调试、性能测试工具的不同版本。

Developer Toolset 3、Developer Toolset 4、Developer Toolset 6已经废弃。

Developer Toolset 7对应GCC 7版本

yum install devtoolset-7

Developer Toolset 8对应GCC 8版本

  1. Clang and LLVM Toolset

Clang and LLVM Toolset是为CentOS和REHL Linux平台开发者设计的开发工具集,提供LLVM编译器基础设施、C/C++语言Clang编译器、LLDB调试器、代码分析相关工具。

yum install llvm-toolset-7.0

安装Clang and LLVM Toolset

  1. Go Toolset

Go Toolset是为CentOS和REHL Linux平台开发者设计的开发工具集,提供Golang编程语言库和工具。

yum install go-toolset-7

安装Go Toolset

  1. Python软件集

SCL中,Python软件集包括Python27、Python33、Python34、Python35、Python36五个版本,相应的SCL软件集名称为python27、python33、rh-python34、rh-python35、rh-python36。

rh-python36包含Python3.6解释器、Web编程扩展库、mod_wsgi、PostgreSQL数据库接口库、numpy、scipy。

yum install rh-python36

安装rh-python36

  1. Redis软件集

Redis软件集有Redis3.2和Redis5.0两个版本,SCL名称分别为rh-redis32和rh-redis5。

yum install rh-redis5

安装rh-redis5

  1. MySQL

MySQL软件集有MySQL5.5、MySQL5.6、MySQL5.7、MySQL8.0四个版本,SCL名称分别为rh-mysql55、rh-mysql56、rh-mysql57、rh-mysql80。

yum install rh-mysql80

安装rh-mysql80

六、SCL使用

  1. SCL软件集查看
yum list all --enablerepo='centos-sclo-rh'

查询SCL支持的软件集合

  1. 查看已安装SCL软件集
scl --list
  1. 查询已安装SCL软件集
scl --list SCL_NAME

七、建议使用devtoolset安装gcc?还是源码编译gcc?

  • 临时使用不同版本的gcc,建议devtoolset
  • 长期项目使用gcc,建议源码编译安装gcc

这篇关于【系统软件01】devtoolset离线安装gcc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170790

相关文章

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Pycharm安装报错:Cannot detect a launch configuration解决办法

《Pycharm安装报错:Cannotdetectalaunchconfiguration解决办法》本文主要介绍了Pycharm安装报错:Cannotdetectalaunchconfigur... 本文主要介绍了Pycharm安装报错:Cannot detect a launch configuratio

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

2025最新版Python3.13.1安装使用指南(超详细)

《2025最新版Python3.13.1安装使用指南(超详细)》Python编程语言自诞生以来,已经成为全球最受欢迎的编程语言之一,它简单易学易用,以标准库和功能强大且广泛外挂的扩展库,为用户提供包罗... 目录2025最新版python 3.13.1安装使用指南1. 2025年Python语言最新排名2.

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下