本篇介紹 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 多版本切換