Ubuntu下多gcc版本的管理
开发过程中,在编译一个开源项目时,由于代码使用的c++版本过高,而系统内置的gcc版本过低时,这个时候我们就需要升级gcc版本,但是为了避免兼容性问题,安装多个版本的gcc,然后可以按需切换是个不错的解决方案。
查看gcc版本
$ gcc -v
$ g++ -v
笔者的gcc版本还是5,这个是Ubuntu16自带的,那么如果下载的源码使用了c++17的API,那么可能就会遇到编译问题,比如笔者遇到的问题
filesystem: No such file or directory
#include <filesystem>
^
compilation terminated.
ninja: build stopped: subcommand failed.
Source file was:
#include <filesystem>
int main(void)
{
return std::filesystem::is_regular_file("/") ? 0 : 1;
}
Performing C++ SOURCE FILE Test std_filesystem_with_libfs failed
filesystem是c++17新增的,使用g++5当然无法编译通过。那么是时候升级gcc/g++版本了。
查看可用的gcc版本,这个是官方release的地址
http://ftp.gnu.org/gnu/gcc/
安装新版本gcc
1.添加软件源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2.更新源
sudo apt-get update
3.安装gcc-9
sudo apt-get install gcc-9
这样安装的是9.xx版本最新的稳定版本,也可以安装指定版本,比如
sudo apt-get install gcc-9.5.0
4.查看已安装gcc版本
locate
是Ubuntu自建文件数据库,比直接搜索文件快的多,但是locate
每天更新一次,实时性没那么好
sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PixAhmSw-1677228525467)(null)]
5.切换gcc版本
使用update-alternatives
命令切换
# 命令最后的 20和50是优先级,如果使用auto选择模式,系统将默认使用优先级高的
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
更改不同版本gcc优先级时,会自动将高优先级版本作为当前使用的版本。
同理:对g++多版本管理也是同样的操作。
欢迎关注我的公众号“虎哥Lovedroid”,原创技术文章第一时间推送。
