所以我已经安装了 gcc-4.4 和 gcc-4.3(g++ 相同)。现在据我所知,Ubuntu 中有一个工具可以为你设置符号链接,如果你告诉它你想要哪个版本。但是,它似乎在最新版本中不起作用,我感到很失望。
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
有任何想法吗?
首先擦除和的当前
update-alternatives
设置:gcc
g++
安装包
似乎
gcc-4.3
和gcc-4.4
都是在安装 build-essential 之后安装的。但是,我们可以显式安装以下软件包:安装替代品
符号链接
cc
和c++
默认安装。我们将为gcc
和安装符号链接g++
,然后分别链接cc
和c++
到gcc
和g++
。(请注意10
,20
和30
选项是每个备选方案的优先级,其中数字越大优先级越高。)配置备选方案
最后一步是配置 , 的默认
gcc
命令g++
。在 4.3 和 4.4 之间交互切换很容易:或使用脚本切换:
在终端执行:
好的,所以这部分相当简单。棘手的部分是,当您发出命令 GCC 时,它实际上是一个符号链接,指向您正在使用的 GCC 版本。这意味着我们可以创建一个从 GCC 到我们想要的任何版本的 GCC 的符号链接。
这真的是可取的吗?版本之间存在 ABI 更改
gcc
。用一个版本编译一些东西(例如整个操作系统),然后用另一个版本编译一些东西,可能会导致冲突。例如,内核模块应该始终与
gcc
用于编译内核的相同版本进行编译。考虑到这一点,如果您手动更改/usr/bin/gcc
Ubuntu 版本中使用的版本之间的符号链接,未来 DKMS 构建的模块可能会使用错误的gcc
版本。如果你只是想用不同版本的 构建东西
gcc
,这很容易,即使使用 makescripts 也是如此。例如,您可以在gcc
环境CC
变量中传入版本:您可能在 make 命令中不需要它(配置脚本通常将其拉入),但它不会受到伤害。
编辑:
这假设您首先安装了该版本,例如:
原来的:
而对于那些懒惰的人来说,这里有一条线,只需将最后的数字更改为您想要的版本即可。它将改变gcc和/或g++
在这个例子中,我切换到 4.9
此示例中没有错误检查,因此您可能需要在运行之前检查将运行的内容。只需在sudo之前添加echo。为了完整起见,我还提供了检查行:
检查的输出应该是这样的:
您可以使用以下命令检查版本:
半详细解释:
我希望从 gcc/g++ 9.x(已安装)切换到 10.x:
旧版本仍然安装,以防您需要切换回来,只需使用命令表格 2. 与您的旧版本!
我通常还将相关的 gcc 工具(
gcc-ar
,...)配置为从属,因此您可以一次切换所有这些工具:然后选择默认的:
临时目录中的符号链接怎么样:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
您可以使用替代命令,希望对您有所帮助!
https://snipboard.io/zE4B9D.jpg