如何在Ubuntu中更改默认的GCC编译器?

时间:2011-10-20 08:09:36

标签: linux ubuntu gcc

我已经在ubuntu 11.04上安装了gcc-3.3 / g ++ - 3.3,它已经有了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文件。

8 个答案:

答案 0 :(得分:100)

正如@Tommy建议的那样,你应该使用update-alternatives 它为一个系列的每个软件分配值,以便定义应用程序的调用顺序。

它用于在系统上维护相同软件的不同版本。在您的情况下,您将能够使用gcc的几个倾向,并且一个将受到青睐。

要弄清楚gcc的当前优先级,请输入@ tripleee评论指出的命令:

update-alternatives --query gcc

现在,请注意归因于gcc-4.4的优先级,因为您需要为gcc-3.3提供更高的优先级。
要设置替代方案,您应该有类似的内容(假设gcc安装位于/usr/bin/gcc-3.3gcc-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

答案 1 :(得分:66)

以下是jHackTheRipper对TL的回答的完整示例; DR众人。 :-)在这种情况下,我想在Ubuntu系统上运行g ++ - 4.5,默认为4.6。作为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。重命名该链接会删除{ {1}}链接,可能会破坏脚本。)

答案 2 :(得分:19)

This is the great description以及如何创建和管理主和从(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

答案 3 :(得分:7)

现在,gcc-4.9可用于Ubuntu / exact。

创建一组编译器替代方案,其中发行版编译器具有更高的优先级:

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

答案 4 :(得分:6)

4.8到6之间,所有--slaves

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6

使用update-alternatives --config gcc更改它们。

答案 5 :(得分:1)

如果您想要一种更快速(但仍然非常干净)的方式来实现个人目的(例如,如果您想构建一个对编译器版本有一些强烈要求的特定项目),请按照以下步骤操作步骤进行:

  • 键入echo $PATH并查找具有非常高优先级的个人目录(在我的情况下,我有~/.local/bin);
  • 在此目录中添加符号链接:

例如:

ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++

当然,这适用于单个用户(它不是系统范围的解决方案),但另一方面,我不喜欢在我的安装中更改太多东西。

答案 6 :(得分:1)

我在尝试安装新的clang编译器时发现了这个问题。原来,the Debianthe LLVM maintainers agree替换系统应该用于替代品,不用于版本化

他们提出的解决方案是这样的:
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 :(得分:0)

我只使用下面的行并且它有效。我只想在VirtualBox上使用VMWare WorkStation汇编kernel 4.8.10Ubuntu 14.04。最初,大多数事情都不适用于图形和网络。我很幸运VMWare workstation要求gcc 6.2.0。我无法启动Genymotion Android emulators,因为虚拟机已关闭。如有必要,稍后会发布结果。

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