如何更改 Ubuntu 中的默认 GCC 编译器?
- 2024-10-29 08:35:00
- admin 原创
- 83
问题描述:
我在 ubuntu 11.04 上安装了 gcc-3.3/g++-3.3,而 ubuntu 11.04 上已经有 gcc/g++-4.4。因此,在我的系统中,gcc-3.3 和 4.4 都可用。我可以根据需要调用这两个编译器。如果我只调用命令gcc
,那么 gcc-4.4 就会被调用。要调用 gcc-3.3,我必须使用命令gcc-3.3
。
我如何将默认编译器更改为 gcc-3.3?当我执行命令时,gcc
它应该调用 gcc-3.3 而不是 gcc-4.4。
此外,如何将 make 文件中的变量 CXX 更改为 gcc-3.3?我希望更改系统中的一个通用全局位置,而不是更改所有 make 文件。
解决方案 1:
正如@Tommy 所建议的,您应该使用update-alternatives
。
它为一个系列的每个软件分配值,以便定义应用程序的调用顺序。
它用于在系统上维护同一软件的不同版本。对于您而言,您可以使用 的多个版本gcc
,其中一种会更受青睐。
要找出 gcc 的当前优先级,请输入@tripleee 的评论指出的命令:
update-alternatives --query gcc
现在,请注意 的优先级,gcc-4.4
因为您需要为 赋予更高的优先级gcc-3.3
。
要设置替代方案,您应该有类似以下内容的内容(假设您的gcc
安装位于/usr/bin/gcc-3.3
,并且gcc-4.4
的优先级小于 50):
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50
- 编辑 -
最后,您还可以使用 的交互式界面update-alternatives
轻松地在版本之间切换。输入 ,系统update-alternatives --config gcc
会要求您在已安装的 gcc 版本中选择要使用的版本。
--编辑 2 --
现在,要修复系统范围内的 CXX 环境变量,您需要将 @DipSwitch 指示的行放入您的.bashrc
文件中(这将仅适用于您的用户更改,在我看来这更安全):
echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
解决方案 2:
这是 jHackTheRipper 为 TL;DR 人群提供的答案的完整示例。:-) 在这种情况下,我想在默认为 4.6 的 Ubuntu 系统上运行 g++-4.5。如root
:
apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5
这里,4.6 仍然是默认的(又称“自动模式”),但我明确地暂时切换到 4.5(手动模式)。要返回 4.6:
update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin
(请注意使用cpp-bin
而不是cpp
。Ubuntu 已经有一个cpp
主链接的替代方案/lib/cpp
。重命名该链接将删除该/lib/cpp
链接,这可能会破坏脚本。)
解决方案 3:
这是关于如何创建和管理主从(gcc 和 g++)替代方案的详细描述和分步说明。
简而言之就是:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc
解决方案 4:
4.8 至 6 之间,全部--slaves
:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \n 10 \n --slave /usr/bin/cc cc /usr/bin/gcc-4.8 \n --slave /usr/bin/c++ c++ /usr/bin/g++-4.8 \n --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 \n --slave /usr/bin/gcov gcov /usr/bin/gcov-4.8 \n --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \n --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \n --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \n --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \n --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8
和
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \n 15 \n --slave /usr/bin/cc cc /usr/bin/gcc-6 \n --slave /usr/bin/c++ c++ /usr/bin/g++-6 \n --slave /usr/bin/g++ g++ /usr/bin/g++-6 \n --slave /usr/bin/gcov gcov /usr/bin/gcov-6 \n --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \n --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \n --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \n --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \n --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6
用 在它们之间切换update-alternatives --config gcc
。
解决方案 5:
现在,Ubuntu/precise 有可用的 gcc-4.9。
创建一组编译器替代方案,其中发行版编译器具有更高的优先级:
root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO
root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO
注意: g++ 版本会随着 gcc 版本切换而自动更改。cpp-bin 必须单独完成,因为存在“cpp”主替代方案。
列出可用的编译器替代方案:
root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin
要手动选择 gcc、g++ 和 cpp 的 4.9 版本,请执行以下操作:
root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin
检查编译器版本:
root$ for i in gcc g++ cpp ; do $i --version ; done
恢复发行版编译器设置(这里:恢复到 v4.6):
root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
解决方案 6:
我在尝试安装新的 clang 编译器时发现了这个问题。事实证明,Debian和LLVM 维护者都同意替代方案系统应该用于替代方案,而不是用于版本控制。
他们提出的解决方案大致如下:
PATH=/usr/lib/llvm-3.7/bin:$PATH
/usr/lib/llvm-3.7/bin 是由 llvm-3.7 软件包创建的目录,其中包含所有不带后缀名的工具。这样,llvm-config(版本 3.7)就会以其纯名出现在您的 PATH 中。无需摆弄符号链接,也无需调用安装在 /usr/bin 中的 llvm-config-3.7。
另外,检查名为 llvm-defaults (或 gcc-defaults)的包,它可能提供其他方法来执行此操作(我没有使用它)。
解决方案 7:
如果您想要一种更快(但仍然非常干净)的方式来实现个人目的(例如,如果您想构建一个对编译器版本有严格要求的特定项目),请按照以下步骤操作:
输入
echo $PATH
并查找具有非常高优先级的个人目录(就我而言,我有~/.local/bin
);在此目录中添加符号链接:
例如:
ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++
当然,这对单个用户来说是有用的(它不是一个系统范围的解决方案),但另一方面,我不喜欢在我的安装中改变太多东西。
解决方案 8:
我仅使用了以下几行,它就成功了。我只想编译VirtualBox
并VMWare WorkStation
使用。最初,大多数东西都无法kernel 4.8.10
正常Ubuntu 14.04
工作,例如图形和网络。我很幸运VMWare workstation
请求了gcc 6.2.0
。我无法启动我的,Genymotion Android emulators
因为 virtualbox 已关闭。如有必要,稍后将发布结果。
VER=4.6 ; PRIO=60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=6 ; PRIO=50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=4.8 ; PRIO=40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件