Redhat7上安装Red Hat Developer Toolset并自由切换gcc和g++的版本

一、Red Hat Developer Toolset 概述

本文环境是RHEL 7.6, 演示了如何在7.6的版本上安装Red Hat Developer Toolset。

在Redhat中,提供了专门的工具包来管理gcc版本,通过使用工具包的方式,就可以随时切换gcc版本,而不破坏原有的gcc环境。例如:

gcc-toolset-12对应gcc12.x.x版本
gcc-toolset-11对应gcc11.x.x版本
gcc-toolset-10对应gcc10.x.x版本
gcc-toolset-9对应gcc9.x.x版本
以此类推

关于Red Hat Developer Toolset的说明:

Red Hat Developer Toolset delivers the latest stable versions of essential GCC C, C++, Fortran, and supporting development tools to enhance developer productivity and improve deployment times.

Red Hat Developer Toolset是作为Red Hat Software Collections的一部分提供的。

想要使用Red Hat Developer Toolset,还必须通过Redhat的订阅管理系统。如何通过Red Hat Subscription Management注册你的系统,可以参考下面这个guide。

Red Hat Subscription Management

关于如何注册成为Redhat的开发者,参考我的另一篇博文, 里面有一节对此有介绍:
Redhat rpm常用命令以及如何配置yum软件仓库使用yum install

二、使用Red Hat Software Collections

2.1 获取pool ID

执行以下命令,以获取你的订阅系统所拥有的pool ID

[root@192 rh]# subscription-manager list --available

20221225234231

2.2 将pool ID 附加到本地系统中

将上一步获取的pool ID,通过以下命令附加到本地系统

subscription-manager attach --pool=xxxxx

20221225234617

可以随时通过以下命令查看你本地已经附加成功的订阅清单:

subscription-manager list --consumed

2.3 获取仓库列表

通过以下命令获取可用的yum仓库列表:

[root@192 ~]# subscription-manager repos --list

20221225235332

这个命令会列出/etc/yum.repos.d/redhat.repo中全部的Available Repositories,有一大堆, 不过我们不用理会,只需要关心如下固定格式的即可:

rhel-variant-rhscl-version-rpms
rhel-variant-rhscl-version-debug-rpms
rhel-variant-rhscl-version-source-rpms

rhel-version-variant-optional-rpms
rhel-version-variant-optional-debug-rpms
rhel-version-variant-optional-source-rpms

由于我的系统是RHEL7.6, 所以将version替换成(7),将variant替换成(server or workstation), 我这里是server,替换好后变成:

rhel-server-rhscl-7-rpms
rhel-server-rhscl-7-debug-rpms
rhel-server-rhscl-7-source-rpms

rhel-7-server-optional-rpms
rhel-7-server-optional-debug-rpms
rhel-7-server-optional-source-rpms

这几条记录在刚刚输出的一堆结果中都是唯一存在的。

2.4 使能上述仓库

通过下述命令将上述步骤中的repository仓库逐一使能。

subscription-manager repos --enable repository

其中的repository分别替换成上面那6个结果。也就是:

subscription-manager repos --enable rhel-server-rhscl-7-rpms
subscription-manager repos --enable rhel-server-rhscl-7-debug-rpms
subscription-manager repos --enable rhel-server-rhscl-7-source-rpms

subscription-manager repos --enable rhel-7-server-optional-rpms
subscription-manager repos --enable rhel-7-server-optional-debug-rpms
subscription-manager repos --enable rhel-7-server-optional-source-rpms

20221226003148

至此,准备工作结束。

三、安装 Red Hat Developer Toolset

通过以下命令可以一次性安装全部的devtoolset-12 package:

yum install devtoolset-12

当然了,你也可以安装指定的package,比如:

yum install devtoolset-12-toolchain

这里我们安装完整的devtoolset-12,完成安装后/opt/rh/目录下会有对应的devtoolset-12目录

20221226004442

四、升级Red Hat Developer Toolset

使用以下命令进行升级:

yum update

五、切换gcc或者g++版本

可以按照下述格式指定gcc版本进行编译,这里指定的是devtoolset-12,对应gcc12版本:

scl enable devtoolset-12 'gcc -o output_file source_file...'

也可以直接执行以下命令,将当前的shell session设置为指定的devtoolset-12版本,那么当前会话中就可以一直使用该版本。

scl enable devtoolset-12 'bash'

20221226004802

对于g++,也是同理

20221226004930

如果想长期使用高版本gcc的话,可以将其写入环境变量

echo "source /opt/rh/devtoolset-12/enable" >>/etc/profile
source /etc/profile
### 构建任务失败解决方案 当遇到 `Execution failed for task ':app:shrinkReleaseRes'` 错误时,这通常意味着资源压缩过程中出现了问题。此错误可能由多种原因引起,包括但不限于配置不正确、依赖冲突或特定于项目的其他因素。 #### 可能的原因分析 1. **ProGuard 或 R8 配置不当** ProGuard R8 是用于优化混淆代码以及减少 APK 大小的工具。如果这些工具的配置存在问题,可能会导致资源无法正常处理[^1]。 2. **重复资源** 如果项目中有多个模块定义了相同的资源名称,可能导致冲突引发该错误。检查是否存在重名的 drawable、string 等资源文件[^2]。 3. **第三方库兼容性** 某些第三方库可能与当前使用的 Gradle 插件版本或其他库存在兼容性问题,从而影响到资源打包过程中的行为[^3]。 4. **Gradle 缓存问题** 有时旧缓存数据会干扰新编译的结果,尝试清理本地仓库重新同步项目可以帮助排除此类潜在障碍[^4]。 #### 推荐的操作方法 为了有效解决问题,建议按照以下步骤逐一排查: ```bash # 清理项目构建目录 ./gradlew clean # 删除 .gradle 文件夹下的所有内容以清除缓存 rm -rf ~/.gradle/caches/ ``` 调整 `build.gradle` 中的相关设置也是一个重要环节: ```groovy android { ... buildTypes { release { minifyEnabled true // 是否启用代码缩减 shrinkResources true // 是否开启资源压缩 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 尝试禁用 shrinkResources 来测试是否为资源压缩引起的错误 // shrinkResources false } } } ``` 此外,在 `proguard-rules.pro` 文件内添加必要的保留规则,防止关键类被意外移除: ```text -keep class com.example.yourpackage.** { *; } # 替换为你自己的包路径 -dontwarn androidx.**,com.google.** # 忽略警告信息 ``` 最后,确保所使用的 Android Studio 版本是最新的稳定版,且已经应用了所有的补丁更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值