背景
最近要安装llvm,我选择的是从源码安装,所以要使用Cmake进行构建项目。但是服务器上的Cmake、gcc、g++的版本都太低了,不符合要求,所以要对此进行升级。在本博客中采用的升级方法不一定是最好的方法(因为我也是参考其他大佬的博客进行升级的),但是我亲测可行。
升级Cmake
1.去Cmake官网下载你想要安装的版本的Cmake文件,推荐使用wget下载。
wget https://cmake.org/files/v3.25/cmake-3.25.3.tar.gz
完成以后,你会发现有一个cmake-3.25.3.tar.gz压缩包。
注:我们使用wget下载的是源码包,下载以后还需要进行编译。另外一种方式是直接在官网下载已经编译好的Cmake压缩包,下载后不需要编译
2.解压。
tar -xvzf cmake-3.25.3.tar.gz
3.进入解压目录,输入以下指令。
chmod 777 ./configure
./configure
chmod 777 表明文件所有者、用户组、其他用户都有可读、可写、可执行权限。
./configure 表示运行该可执行文件。配置成功后显示:CMake has bootstrapped. Now run make。
如果出现错误信息Could not find OpenSSL…,执行sudo apt-get install libssl-dev安装即可。
4.编译
make
5.安装
sudo make install
6.使用update-alternatives替换掉旧的Cmake版本。
sudo update-alternatives --install /usr/bin/cmake cmake xxxx/bin/cmake 1 --force
xxx代表你解压的cmke路径。
7.查看cmake版本。
cmake --version
接下来解释下update-alternatives是什么?
update-alternatives命令用于处理Linux系统中软件版本的切换,使其多版本共存。update-alternatives的管理目录是/etc/alternatives。
$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>命令:--install <链接> <名称> <路径> <优先级>[--slave <链接> <名称> <路径>] ...在系统中加入一组候选项。--remove <名称> <路径> 从 <名称> 替换组中去除 <路径> 项。--remove-all <名称> 从替换系统中删除 <名称> 替换组。--auto <名称> 将 <名称> 的主链接切换到自动模式。--display <名称> 显示关于 <名称> 替换组的信息。--query <名称> 机器可读版的 --display <名称>.--list <名称> 列出 <名称> 替换组中所有的可用候选项。--get-selections 列出主要候选项名称以及它们的状态。--set-selections 从标准输入中读入候选项的状态。--config <名称> 列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。--set <名称> <路径> 将 <路径> 设置为 <名称> 的候选项。--all 对所有可选项一一调用 --config 命令。<链接> 是指向 /etc/alternatives/<名称> 的符号链接。(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。(如 pager)
<路径> 是候选项目标文件的位置。(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
..........
比如我们想查询gcc都有哪些软连接,可以使用如下指令:
sudo update-alternatives --query gcc
输出为:
Name: gcc
Link: /usr/bin/gcc
Status: manual
Best: /usr/bin/gcc-9
Value: /usr/bin/gcc-9Alternative: /usr/bin/gcc-5
Priority: 20Alternative: /usr/bin/gcc-7
Priority: 40Alternative: /usr/bin/gcc-9
Priority: 50
其他的参数大家可以自行尝试。
升级gcc、g++
本博客升级gcc和g++的方法是使用apt-get install 安装更高的版本,当然也可以使用下载源码编译的方式升级。
1.首先查看现有的gcc、g++版本,并添加相应的源
gcc --version
g++ --version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2.更新软件源
sudo apt-get update
3.安装你想要安装的gcc、g++版本
sudo apt-get install gcc-xx g++-xx
这里要指明一点问题:我在添加ppa源的时候无法添加,好像是因为ppa源在国外,所以可以换成中科大源。
参考链接如下:http://t.csdn.cn/g7nsV
在这里我本来是想安装gcc-11的,但是它会显示 E: Unable to locate package gcc-11,所以只能降低版本,最后降到gcc-9才显示有这个安装包,可以成功安装。
4.切换到最新的gcc版本
在切换到最新的gcc版本前,我们可以查看系统中到底存在几个不同的gcc版本,使用如下指令:
sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"
可以看到我这里是有4个。然后我们现在要让gcc-9的优先级最高(也就是输入gcc --version,它显示的版本要是9)。
使用 sudo update-alternatives --query gcc
查看gcc的各个优先级,输出如下:
Name: gcc
Link: /usr/bin/gcc
Status: manual
Best: /usr/bin/gcc-9
Value: /usr/bin/gcc-9Alternative: /usr/bin/gcc-5
Priority: 20Alternative: /usr/bin/gcc-7
Priority: 40Alternative: /usr/bin/gcc-9
Priority: 50
然后用如下指令给gcc-9最高优先级:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
这个时候使用gcc --version
查看版本,如果显示的是还是以前的版本,则使用手动改变的方法,输入如下指令:
sudo update-alternatives --config g++
输出为
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).Selection Path Priority Status
------------------------------------------------------------0 /usr/bin/gcc-9 50 auto mode1 /usr/bin/gcc-5 20 manual mode2 /usr/bin/gcc-7 40 manual mode
* 3 /usr/bin/gcc-9 50 manual mode
键入3回车即可。
这样就可以成功切换gcc的版本了,g++同样的方法,这里不再阐述。
参考链接
1.https://www.cnblogs.com/Maker-Liu/p/16550381.html
2.https://www.jianshu.com/p/4d27fa2dce86
3.https://blog.csdn.net/quxuexi/article/details/121501679