
最近在Ubuntu 20.04上编译的时候遇到了问题,发现默认的GCC 9.4版本太老了,编译不过。折腾了一番,总算把GCC升级到了11.1.0,这里记录一下完整的升级过程,希望能帮到遇到同样问题的朋友。
注意事项:
如果你只是想快速升级到GCC 11,可以直接用这个方法:
# 添加PPA源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# 更新包列表
sudo apt-get update
# 卸载旧版本
sudo apt remove gcc-9 g++-9
sudo apt autoremove
# 安装新版本
sudo apt-get install gcc-11 g++-11
# 设置软链接
sudo ln -sf /usr/bin/gcc-11 /usr/bin/gcc
sudo ln -sf /usr/bin/g++-11 /usr/bin/g++
# 验证版本
gcc -v执行完这些命令后,GCC应该就升级到11.1.0了。
Ubuntu官方源里的GCC版本比较保守,要安装新版本需要添加第三方PPA源:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test添加新源后,需要更新包列表:
sudo apt update可以选择安装GCC 11、12或13:
# 安装GCC 11
sudo apt install gcc-11 g++-11
# 或者安装GCC 12
sudo apt install gcc-12 g++-12
# 或者安装GCC 13
sudo apt install gcc-13 g++-13sudo ln -sf /usr/bin/gcc-11 /usr/bin/gcc
sudo ln -sf /usr/bin/g++-11 /usr/bin/g++这种方法可以方便地在多个版本间切换:
# 安装update-alternatives(通常已经安装)
sudo apt install update-alternatives
# 配置GCC版本管理
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-9
# 选择默认版本
sudo update-alternatives --config gccgcc --version
g++ --version应该能看到类似这样的输出:
gcc (Ubuntu 11.1.0-2ubuntu2~20.04) 11.1.0先备份原来的源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑源文件:
sudo vim /etc/apt/sources.list清华大学源(Ubuntu 22.04 jammy):
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse阿里云源(Ubuntu 20.04 focal):
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse更新源:
sudo apt-get update
sudo apt-get upgrade方法一:手动替换
# 编辑sources.list,将ppa.launchpad.net替换为国内镜像
sudo sed -i 's/ppa.launchpad.net/launchpad.proxy.ustclug.org/g' /etc/apt/sources.list方法二:替换sources.list.d中的PPA源
# 查看PPA源文件
ls /etc/apt/sources.list.d/
# 批量替换
sudo sed -i "s/ppa.launchpad.net/launchpad.proxy.ustclug.org/g" /etc/apt/sources.list.d/*.listDocker环境中的处理:
# 在Dockerfile中添加PPA源后立即替换
apt-add-repository -y ppa:ubuntu-toolchain-r/test
sed -i "s/ppa.launchpad.net/launchpad.proxy.ustclug.org/g" /etc/apt/sources.list.d/*.list如果遇到类似这样的错误:
dpkg-deb: 错误: 粘贴 子进程被信号(断开的管道) 终止了
在处理时有错误发生:
/var/cache/apt/archives/xxx.deb解决方法:
# 强制覆盖安装
sudo dpkg -i --force-overwrite "/var/cache/apt/archives/xxx.deb"
# 然后继续安装
sudo apt-get install -fPPA(Personal Package Archives)是Ubuntu Launchpad提供的个人软件包仓库服务,允许开发者发布官方源中没有的软件包。
sudo add-apt-repository ppa:用户名/ppa名称
sudo apt-get update# 命令行删除
sudo add-apt-repository -r ppa:用户名/ppa名称
# 手动删除文件
cd /etc/apt/sources.list.d
ls # 查看PPA源文件
sudo rm ppa文件名.list # 删除对应文件
# 更新源
sudo apt-get update通过以上步骤,我们成功将Ubuntu 20.04的GCC从9.4升级到了11.1.0。整个过程中最容易遇到的问题就是网络下载慢,通过更换国内镜像源可以很好地解决这个问题。希望这篇文章能帮到遇到类似问题的朋友!
参考:https://github.com/apernet/tcp-brutal/issues/7 https://blog.csdn.net/x1131230123/article/details/132544277 https://blog.csdn.net/LangLang_2020/article/details/134195060 https://blog.csdn.net/shuizhongmose/article/details/125390322 https://www.cnblogs.com/zhaoyingjie/p/17150416.html https://www.zhihu.com/question/382334154/answer/1131393495 https://www.cnblogs.com/jiftle/p/14121582.html https://www.fujieace.com/kali-linux/dpkg-deb-2.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。