<Linux开发>linux开发工具- 之-gcc/g++安装及切换

<Linux开发>linux开发工具- 之-gcc/g++安装及切换

前言,这些天作者在编译高通的boot时出现了一些错误,如下所示,查找了很多资料都没有详细的说明问题的解决法方法;作者通过对比同事的电脑环境,作出了尝试,然后把这个问题解决了的。

问题现象:

yStandard -I ../Common/ -I .. -I . -I ../Include/X64/  -O2 EfiUtilityMsgs.c -o EfiUtilityMsgs.o
In file included from /usr/include/string.h:495,
                 from EfiUtilityMsgs.c:16:
In function ‘strncat’,
    inlined from ‘PrintMessage’ at EfiUtilityMsgs.c:484:9:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:136:10: error: ‘__builtin___strncat_chk’ output may be truncated copying between 0 and 511 bytes from a string of length 511 [-Werror=stringop-truncation]
  136 |   return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘strncat’,
    inlined from ‘PrintMessage’ at EfiUtilityMsgs.c:469:9:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:136:10: error: ‘__builtin___strncat_chk’ output may be truncated copying between 0 and 511 bytes from a string of length 511 [-Werror=stringop-truncation]
  136 |   return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘strncat’,
    inlined from ‘PrintMessage’ at EfiUtilityMsgs.c:511:5:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:136:10: error: ‘__builtin___strncat_chk’ output may be truncated copying between 0 and 511 bytes from a string of length 511 [-Werror=stringop-truncation]
  136 |   return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [../Makefiles/footer.makefile:27:EfiUtilityMsgs.o] 错误 1

问题的原因就是在调用strncat是发生警告错误,发生了截断的操作,使后续发生连锁反应错误。

解决的方式就是切换gcc和g++的版本,由gcc-9.3切换为gcc-8.4,g+±9.3切换为g++8.4。

以下则是具体过程,主要就是切换gcc/g++版本;

一、查看当前版本
1)打开终端,输入:gcc -v // 查看gcc版本
输入:g++ -v // 查看g++版本
作者的版本是: gcc 9.3 g++ 9.3

二、安装所需的gcc/g++版本
1)安装gcc/g++
打开终端,输入:sudo apt-get install gcc-8 g+±8
// 同时安装 gcc-8和g+±8版本的

2)查看安装后已有的gcc版本
打开终端,输入:ls /usr/bin/gcc* //  查看已安装 gcc的版本

在这里插入图片描述
打开终端,输入:ls /usr/bin/g++* // 查看已安装 g++的版本
在这里插入图片描述
上图中,作者已安装 -8和-9两个

三、切换gcc和g++版本
1、切换gcc版本
1)将所有的gcc版本加入gcc候选中,最后的数字是优先级,指令如下:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100

2)进入版本切换界面,输入:

sudo update-alternatives --config gcc

在这里插入图片描述
3)在配置窗口输入对应要切换使用的版本,对应的序号,这里作者选择:3,输入后按下回车即可。
4)再次通过“gcc -v”查看版本,即可确认是否切换成功;
作者通过以上步骤实践,是可以正常切换的。

2、切换g++版本
1)将所有的g++版本加入g++候选中,最后的数字是优先级,指令如下:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100

2)进入版本切换界面,输入:

sudo update-alternatives --config g++

在这里插入图片描述

3)在配置窗口输入对应要切换使用的版本,对应的序号,这里作者选择:1,输入后按下回车即可。
4)再次通过“g++ -v”查看版本,即可确认是否切换成功;
作者通过以上步骤实践,是可以正常切换的。

四、至此,gcc和g++版本切换完成,同时也解决了作者开发过程中遇到的错误。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux中更新gcc命令的步骤如下: 1. 首先,为了不覆盖原来的gcc命令,需要备份原来的相关内容。可以执行以下命令: ``` mv /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 mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak ``` 这样可以将原来的gcc命令备份到相应的目录下。 2. 安装新版本的gcc后,新的gcc命令位于/usr/local/bin目录下。为了让系统能够找到新的gcc命令,需要创建软链接。可以执行以下命令: ``` ln -s /usr/local/bin/gcc /usr/bin/gcc ln -s /usr/local/bin/g++ /usr/bin/g++ ln -s /usr/local/bin/c++ /usr/bin/c++ ln -s /usr/local/bin/gcc /usr/bin/cc ln -s /usr/local/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6 ``` 这样可以创建软链接,将新版本的gcc命令与系统路径关联起来。 3. 如果需要在特定目录下使用新版本的gcc,可以使用cd命令切换到相应的目录,然后执行解压命令。例如,如果要将gmp文件解压到目录gcc-10.1.0,可以执行以下命令: ``` cd /opt2/test_other/debug_test/ tar -jvxf gmp-6.1.0.tar.bz2 --directory=/usr/local/gcc-10.1.0/ ``` 这样可以将gmp文件解压到指定目录。 请注意,更新gcc命令可能需要root权限或管理员权限。在执行任何系统命令之前,请确保您具有足够的权限。 #### 引用[.reference_title] - *1* *2* *3* [linux升级gcc版本详细教程](https://blog.csdn.net/weixin_43354152/article/details/129247408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

waterfxw

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

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

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

打赏作者

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

抵扣说明:

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

余额充值