最近在Ubuntu 20.04上编译的时候遇到了问题,发现默认的GCC 9.4版本太老了,编译不过。折腾了一番,总算把GCC升级到了11.1.0,这里记录一下完整的升级过程,希望能帮到遇到同样问题的朋友。
注意事项:
- 升级前建议备份重要数据
- 某些依赖旧版本GCC的软件可能需要重新编译
- 生产环境升级需要充分测试
一、快速升级方法(推荐)
如果你只是想快速升级到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了。
二、详细升级步骤
1. 添加PPA源
Ubuntu官方源里的GCC版本比较保守,要安装新版本需要添加第三方PPA源:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2. 更新系统包列表
添加新源后,需要更新包列表:
sudo apt update
3. 安装指定版本的GCC
可以选择安装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++-13
4. 配置默认版本
方法一:使用软链接(简单)
sudo ln -sf /usr/bin/gcc-11 /usr/bin/gcc
sudo ln -sf /usr/bin/g++-11 /usr/bin/g++
方法二:使用update-alternatives(推荐)
这种方法可以方便地在多个版本间切换:
# 安装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 gcc
5. 验证安装
gcc --version
g++ --version
应该能看到类似这样的输出:
gcc (Ubuntu 11.1.0-2ubuntu2~20.04) 11.1.0
三、常见问题及解决方案
问题1:软件源下载太慢
更换国内镜像源
先备份原来的源:
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
问题2:PPA源下载慢
替换PPA镜像
方法一:手动替换
# 编辑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/*.list
Docker环境中的处理:
# 在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
问题3:dpkg包管理错误
如果遇到类似这样的错误:
dpkg-deb: 错误: 粘贴 子进程被信号(断开的管道) 终止了
在处理时有错误发生:
/var/cache/apt/archives/xxx.deb
解决方法:
# 强制覆盖安装
sudo dpkg -i --force-overwrite "/var/cache/apt/archives/xxx.deb"
# 然后继续安装
sudo apt-get install -f
四、PPA源管理
什么是PPA
PPA(Personal Package Archives)是Ubuntu Launchpad提供的个人软件包仓库服务,允许开发者发布官方源中没有的软件包。
添加PPA源
sudo add-apt-repository ppa:用户名/ppa名称
sudo apt-get update
删除PPA源
# 命令行删除
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