<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的版本

<Linux开发>linux开发工具- 之-gcc/g++安装及切换_第1张图片
打开终端,输入:ls /usr/bin/g++* // 查看已安装 g++的版本
<Linux开发>linux开发工具- 之-gcc/g++安装及切换_第2张图片
上图中,作者已安装 -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

<Linux开发>linux开发工具- 之-gcc/g++安装及切换_第3张图片
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++

<Linux开发>linux开发工具- 之-gcc/g++安装及切换_第4张图片

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

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

你可能感兴趣的:(Linux开发工具,高通8155开发,ubuntu,ubuntu,开发工具,gcc/gdb编译调试)