如何在 ArchLinux 中临时更改 gcc 的默认版本

sal*_*ali 5 arch-linux gcc

我安装了 ArchLinux 和 2 个版本的 gcc。默认一个(“gcc”)是“gcc(GCC)7.1.1”和“gcc-5”一个是“gcc-5(GCC)5.4.0”。

我很难构建一些项目来检查 gcc(和 g++)的版本是否小于或等于 5。(更具体地说,从 nvidia 安装 cuda-8.0 的官方运行文件,或者构建已经使用过的项目cuda 库及其头文件)

我想要的只是在我的环境中(临时)更改 gcc 的默认版本,并在我完成后将其设置回来,例如类似 debian 的发行版中的“update-alternatives”解决方案。

以下是我的 /usr/bin 中与 gcc 和 g++ 相关的二进制文件的一些信息:

$ ls -l | grep gcc
lrwxrwxrwx 1 root root        3 Jun 30 16:49 cc -> gcc
-rwxr-xr-x 3 root root   997840 Jun 30 16:49 gcc
-rwxr-xr-x 3 root root   873352 Jul 11  2016 gcc-5
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 gcc-ar
-rwxr-xr-x 2 root root    25544 Jul 11  2016 gcc-ar-5
-rwxr-xr-x 2 root root   875720 Jul 11  2016 gccgo-5
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 gcc-nm
-rwxr-xr-x 2 root root    25512 Jul 11  2016 gcc-nm-5
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 gcc-ranlib
-rwxr-xr-x 2 root root    25512 Jul 11  2016 gcc-ranlib-5
-rwxr-xr-x 3 root root   997840 Jun 30 16:49 x86_64-pc-linux-gnu-gcc
-rwxr-xr-x 3 root root   873352 Jul 11  2016 x86_64-pc-linux-gnu-gcc-5
-rwxr-xr-x 3 root root   873352 Jul 11  2016 x86_64-pc-linux-gnu-gcc-5.4.0
-rwxr-xr-x 3 root root   997840 Jun 30 16:49 x86_64-pc-linux-gnu-gcc-7.1.1
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 x86_64-pc-linux-gnu-gcc-ar
-rwxr-xr-x 2 root root    25544 Jul 11  2016 x86_64-pc-linux-gnu-gcc-ar-5
-rwxr-xr-x 2 root root   875720 Jul 11  2016 x86_64-pc-linux-gnu-gccgo-5
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 x86_64-pc-linux-gnu-gcc-nm
-rwxr-xr-x 2 root root    25512 Jul 11  2016 x86_64-pc-linux-gnu-gcc-nm-5
-rwxr-xr-x 2 root root    27104 Jun 30 16:49 x86_64-pc-linux-gnu-gcc-ranlib
-rwxr-xr-x 2 root root    25512 Jul 11  2016 x86_64-pc-linux-gnu-gcc-ranlib-5
Run Code Online (Sandbox Code Playgroud)

l3x*_*l3x 10

总而言之sudo ln -s $(which gcc-5) /usr/local/bin/gcc; hash -r

默认情况下,gcc 二进制文件位于/usr/bin

检查我们的路径,我们发现这/usr/local/bin是第一位的:

echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
. . .
Run Code Online (Sandbox Code Playgroud)

因此,假设我们安装了 gcc-5 ( yaourt --noconfirm -S gcc5),我们可以通过创建符号链接来使其成为“默认”版本,/usr/local/bin如下所示:

sudo ln -s $(which gcc-5) /usr/local/bin/gcc
sudo ln -s $(which g++-5) /usr/local/bin/g++
Run Code Online (Sandbox Code Playgroud)

接下来,我们需要重新哈希 gcc 以删除旧的、记住的 gcc 位置:

hash -r
Run Code Online (Sandbox Code Playgroud)

要恢复 gcc 的原始“默认”版本,我们只需删除该符号链接并重新哈希:

sudo rm /usr/local/bin/gcc /usr/local/bin/g++
hash -r
Run Code Online (Sandbox Code Playgroud)