【系统软件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

相关文章

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

如何在pycharm安装torch包

《如何在pycharm安装torch包》:本文主要介绍如何在pycharm安装torch包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录在pycharm安装torch包适http://www.chinasem.cn配于我电脑的指令为适用的torch包为总结在p

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是