本篇介紹 Ubuntu 安裝 gcc/g++ 以及 gcc/g++ 多版本切換方式,
使用 apt-get 安装最新版本的 gcc
使用 apt-get 安装最新版本的 gcc 與 g++ 指令如下,安裝前記得先 apt-get update 一下,1
2sudo apt-get update
sudo apt-get install gcc g++
使用 apt-get 安装指定的 gcc/g++ 版本
以我 ubuntu 16.04 為例,可以安裝的版本如下,1
2
3
4sudo apt-get install gcc-4.7 g++-4.7
sudo apt-get install gcc-4.8 g++-4.7
sudo apt-get install gcc-4.9 g++-4.7
sudo apt-get install gcc-5 g++-5
那怎麼看可以安裝哪幾種版本呢?
用 apt-cache showpkg gcc 列出來的資訊不太準,我用 apt-cache search gcc 列出來以後自己慢慢看比較準,不過需要一些經驗,用 apt-cache showpkg gcc | grep ^gcc- 列出 gcc- 開頭,或者 apt-cache showpkg gcc | grep ^gcc-[0-9] 列出 gcc-0 開頭 ~ gcc-9 開頭的選項,這樣看會比較輕鬆。  
切換不同版本的 gcc/g++
假如你系統已經裝了兩個版本或以上的 gcc,例如已經裝了 gcc-4.7 與 gcc-5,你可以直接使用 g++-4.7 或 g++-5 來編譯 C++ 程式,或者你可以透過下列方式來選擇預設 gcc/g++ 要使用哪個版本,假設我要把 gcc-5 作為我的預設 gcc,就輸入這樣的指令,把 gcc-4.7 優先權設定為 47,gcc-5 優先權設為 50 (越高越優先),1
2
3
4# gcc-4.7 g++-4.7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 47 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
# gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
這邊我是一起設定 gcc 與 g++ 一起作動,你可以單獨分開設定,後面不要加 --slave 就可,  
這時候你可以用 gcc --version 跟 g++ --version 指令來檢查確認一下當前 gcc 使用的版本,1
2
3
4
5
6
7
8
9
10
11$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
輸入 sudo update-alternatives --config gcc 來選擇使用哪一種版本1
2
3
4
5
6
7
8
9
10$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-5     50        auto mode
  1            /usr/bin/gcc-4.7   47        manual mode
  2            /usr/bin/gcc-5     50        manual mode
Press <enter> to keep the current choice[*], or type selection number:
然後在 selection number: 輸入 1 按 enter 的話,會手動切換成 gcc-4.7 與 g++-4.7(原本為 0 自動模式是按優先權決定)之後再用 gcc --version 去確認一下當前 gcc 使用的版本應該就切換成 gcc-4.7 了,1
2
3
4
5$ gcc --version
gcc (Ubuntu/Linaro 4.7.4-3ubuntu12) 4.7.4
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gcc update-alternatives 連動更多相關程式的版本
稍早有介紹將 gcc 與 g++ 的版本使用 update-alternatives 一起連動,但通常還有更多的 gcc 相關工具也要一起連動,例如:gcc-ar、gcc-nm 等等,以下提供一個方便的腳本來連動這些事情,有些執行檔舊版本不一定有,可以註解掉,挑選你想要連動的相關程式就好,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function update-alternatives-gcc() {
    local version=$1
    local priority=$2
    update-alternatives \
        --install /usr/bin/gcc        gcc        /usr/bin/gcc-${version} ${priority} \
        --slave   /usr/bin/g++        g++        /usr/bin/g++-${version} \
        --slave   /usr/bin/gcc-ar     gcc-ar     /usr/bin/gcc-ar-${version} \
        --slave   /usr/bin/gcc-nm     gcc-nm     /usr/bin/gcc-nm-${version} \
        --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${version} \
        --slave   /usr/bin/gcov       gcov       /usr/bin/gcov-${version} \
        --slave   /usr/bin/gcov-dump  gcov-dump  /usr/bin/gcov-dump-${version} \
        --slave   /usr/bin/gcov-tool  gcov-tool  /usr/bin/gcov-tool-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcc        x86_64-linux-gnu-gcc        /usr/bin/x86_64-linux-gnu-gcc-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-g++        x86_64-linux-gnu-g++        /usr/bin/x86_64-linux-gnu-g++-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcc-ar     x86_64-linux-gnu-gcc-ar     /usr/bin/x86_64-linux-gnu-gcc-ar-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcc-nm     x86_64-linux-gnu-gcc-nm     /usr/bin/x86_64-linux-gnu-gcc-nm-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcc-ranlib x86_64-linux-gnu-gcc-ranlib /usr/bin/x86_64-linux-gnu-gcc-ranlib-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcov       x86_64-linux-gnu-gcov       /usr/bin/x86_64-linux-gnu-gcov-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcov-dump  x86_64-linux-gnu-gcov-dump  /usr/bin/x86_64-linux-gnu-gcov-dump-${version} \
        --slave   /usr/bin/x86_64-linux-gnu-gcov-tool  x86_64-linux-gnu-gcov-tool  /usr/bin/x86_64-linux-gnu-gcov-tool-${version}
}
update-alternatives-gcc $1 $2
例如我要將 gcc-4.7、g++-4.7、gcc-ar-4.7、gcc-nm-4.7 … 加入 update-alternatives --config gcc 的選項裡的話,執行 update-alternatives-gcc.sh 腳本後面接上版本跟優先權這樣就可以了!1
sudo update-alternatives-gcc.sh 4.7 47
如果是要將 gcc-5、g++-5 … 加入 update-alternatives --config clang 的選項裡的話,就這樣下,1
sudo update-alternatives-gcc.sh 5 50
其他參考
update-alternatives · GitHub
https://gist.github.com/lopesivan/6f638631552ed7090e2236cd83358028  
其它相關文章推薦
Ubuntu 安裝 clang,clang 多版本切換