所以我安装了 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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
hhl*_*hlp 344
首先擦除当前update-alternatives设置为gcc和g++:
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
Run Code Online (Sandbox Code Playgroud)
安装包
似乎在 install build-essential 之后都安装了gcc-4.3和gcc-4.4。但是,我们可以显式安装以下软件包:
sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4
Run Code Online (Sandbox Code Playgroud)
安装替代品
符号链接cc和c++默认安装。我们将安装符号链接,gcc和g++,然后链接cc并c++以gcc和g++分别。(请注意,10、20和30选项是每个选项的优先级,其中数字越大优先级越高。)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
Run Code Online (Sandbox Code Playgroud)
配置替代方案
最后的步骤是配置默认命令的gcc,g++。在 4.3 和 4.4 之间交互切换很容易:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
Run Code Online (Sandbox Code Playgroud)
或者使用脚本切换:
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
Run Code Online (Sandbox Code Playgroud)
hhl*_*hlp 51
在终端执行:
gcc -v
g++ -v
Run Code Online (Sandbox Code Playgroud)
好的,这部分相当简单。棘手的部分是,当您发出 GCC 命令时,它实际上是指向您正在使用的 GCC 版本的符号链接。这意味着我们可以创建一个从 GCC 到我们想要的任何 GCC 版本的符号链接。
Run Code Online (Sandbox Code Playgroud)ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4
Run Code Online (Sandbox Code Playgroud)rm /usr/bin/gcc rm /usr/bin/g++ ln -s /usr/bin/gcc-4.3 /usr/bin/gcc ln -s /usr/bin/g++-4.3 /usr/bin/g++
Run Code Online (Sandbox Code Playgroud)ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++
Run Code Online (Sandbox Code Playgroud)gcc -v g++ -v
Oli*_*Oli 24
这真的是可取的吗?gcc版本之间存在 ABI 更改。用一个版本(例如整个操作系统)编译某些东西,然后用另一个版本编译其他东西,可能会导致冲突。
例如,内核模块应始终gcc使用用于编译内核的相同版本进行编译。考虑到这一点,如果您手动更改了/usr/bin/gccUbuntu 版本中使用的版本之间的符号链接,未来的 DKMS 构建模块可能会使用错误的gcc版本。
如果您只想使用不同版本的gcc. 例如,您可以gcc在CC环境变量中传入版本:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Run Code Online (Sandbox Code Playgroud)
您可能不需要在 make 命令中使用它(配置脚本通常将其拉入),但它不会受到伤害。
Ale*_*Ale 18
编辑:
这假设您首先安装了该版本,例如:
sudo apt install gcc-4.9 g++-4.9
Run Code Online (Sandbox Code Playgroud)
原来的:
这里有一个单行,适合懒惰的人,只需将末尾的数字更改为您想要的版本即可。它将对gcc和/或g++进行更改
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我切换到 4.9
在这个例子中没有错误检查和什么没有,所以你可能想在运行之前检查将运行什么。只需在sudo之前添加echo。为了完整起见,我还提供了检查行:
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
Run Code Online (Sandbox Code Playgroud)
检查的输出应该是这样的:
sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令检查版本:
gcc --version
Run Code Online (Sandbox Code Playgroud)
半详细解释:
小智 18
我希望从 gcc/g++ 9.x (已安装)切换到 10.x:
Run Code Online (Sandbox Code Playgroud)sudo apt install gcc-10 sudo apt install g++-10
Run Code Online (Sandbox Code Playgroud)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
Run Code Online (Sandbox Code Playgroud)gcc --version g++ --version
旧版本仍然安装,以防您需要切换回来,只需使用旧版本的命令形式 2. 即可!
我通常也将相关的 gcc 工具 ( gcc-ar, ...) 配置为从属工具,因此您可以一次切换所有这些工具:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.3 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.3 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.3
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.4 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.4 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.4
Run Code Online (Sandbox Code Playgroud)
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20
Run Code Online (Sandbox Code Playgroud)
然后选择默认的:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
552220 次 |
| 最近记录: |