不同版本的GNU编译器共存
前言:
首先通过 apt install xxx 安装的软件都有一个网站(源)作为下载的索引网站。如果你这个系统默认配置的源中没有你想要的软件或者依赖包的话,那么就不能通过apt install 来安装。
linux系统中的网站(源)通过 /etc/opt/sources.list 文件来配置 。由于Ubuntu22.04代号jammy 系统中默认配置的g++版本为11。而其他版本也只存在9,10的源。所以只有对这个配置文件进行修改才能下载其他版本的g++。故有一下操作。
-
1.添加老版本ubuntu的镜像源
命令行输入
sudo gedit /etc/apt/sources.list
/etc属于系统文件的范畴,所以需要sudo给这一条命令赋予管理员的权限。也可以使用sudo -i 给整个终端赋予管理员权限。
-
2.在sources.list中添加下面两个网站(源)
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse # under is append deb https://mirrors.aliyun.com/ubuntu/ focal main universe deb https://mirrors.aliyun.com/ubuntu/ xenial main universe deb https://mirrors.aliyun.com/ubuntu/ bionic main universe
其中
- jammy:ubuntu 22.04
- focal:ubuntu 20.04
- bionic:ubuntu 20.04
- xenial:ubuntu 18.04
保存退出。
-
3.将网站(源)中的更新拉取到本地,作为cache保存
sudo apt update
此命令是将远程更新拉取本地作为缓存
在此你会发现有如下报错,因为你没有GPG签名,在安装不是原有系统源中的软件时,可能需要此操作。
W: GPG error: http://mirrors.aliyun.com/ubuntu xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32 E: The repository 'http://mirrors.aliyun.com/ubuntu xenial InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.
此时只需要关注NO_PUBKEY是啥数字。执行 最后一个参数与你看到的数字对应。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
通过一下命令可以查看是否有你目前的cache中,是否有你想要g++版本
apt-cache search g++| grep g++-*
*:为通配符
grep:为在指定的范围内的查找命令
-
4.下载你所需版本的g++,例如 sudo apt-get install g+±版本号
sudo apt-get install g++-10
下载完成后,只是将此版本下载到本地,还没配置作为系统环境的g++编译器。
5.查看本地的已有的g++,以及更换指定版本的g++编译器
dpkg -l | grep g++ #查询本地已有的c++版本 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100 #更换系统的c++版本
6.不同版本g++的位置和其命名
#位置 /usr/bin/ #命名 /usr/bin/g++-版本号
附:在安装过程中,apt和apt-get的区别
apt | apt-get |
---|---|
apt 在某些情况下会显示更易读的信息,并且有更好的进度条显示。 | apt-get 的输出通常更为简洁,不如 apt 那么直观。 |
apt 会自动对被依赖关系影响的软件包进行处理。 | apt-get 需要使用单独的命令来处理这些软件包。 |
apt 会自动确认操作。 | apt-get 需要用户手动输入 “yes” 确认。 |
apt 在安装或卸载软件包后会自动清理不再需要的依赖关系。 | apt-get 不会自动进行清理,apt-get autoremove 命令来进行清理。 |
参考网站:https://www.yii666.com/blog/357598.html