背景
有时编译某个开源项目源码时需要安装不同版本的gcc或g++,而现有的gcc或g++又需要保留,这时可以采取配置备选项的方法让多个版本的可执行文件共存
下载安装
root@sundata:/data/szc# mkdir gcc-3.4 && cd gcc-3.4
root@sundata:/data/szc/gcc-3.4# wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
root@sundata:/data/szc/gcc-3.4# wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4_3.4.6-6ubuntu3_amd64.deb
root@sundata:/data/szc/gcc-3.4# wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu3_amd64.deb
root@sundata:/data/szc/gcc-3.4# wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/g++-3.4_3.4.6-6ubuntu3_amd64.deb
root@sundata:/data/szc/gcc-3.4# wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb
root@sundata:/data/szc/gcc-3.4# dpkg -i *.deb
如果要安装不同版本的gcc或g++,可以到上面命令行中涉及的URL(http://old-releases.ubuntu.com/ubuntu/pool/universe)去找,里面是按照包的首字母分门别类的,比如找gcc,就进入g目录中去即可
添加备选项并使用
备选项的配置和使用是通过update-alternatives命令实现的,这是ubuntu中自带的工具。
添加备选项通过--install参数实现,格式为update-alternatives --install 镜像bin文件路径 镜像名 真实bin文件路径 镜像优先级,示例如下(其中gcc7是以前安装的,gcc3.4是刚安装的,后面的1和0表示优先级)
root@sundata:/data/szc/gcc-3.4# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1
root@sundata:/data/szc/gcc-3.4# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 0
使用某一个备选项通过--config实现,格式为update-alternatives --config 镜像名,示例如下
root@sundata:/data/szc/gcc-3.4# update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-7 1 auto mode
1 /usr/bin/gcc-3.4 0 manual mode
2 /usr/bin/gcc-7 1 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/gcc-3.4 to provide /usr/bin/gcc (gcc) in manual mode
因为/usr/bin默认是在环境变量PATH中的,所以经过上述过程,我们就可以通过gcc来使用3.4版本的gcc了
root@sundata:/data/szc/gcc-3.4# gcc --version
gcc (GCC) 3.4.6 (Ubuntu 3.4.6-6ubuntu3)
Copyright (C) 2006 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++做同样的处理(第一步下载安装时,也安装了3.4版本的g++,注意下载包时使用的URL),过程则和配置gcc完全一样,只要把gcc换成g++即可
root@sundata:/data/szc/gcc-3.4# update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 1
update-alternatives: using /usr/bin/g++-7 to provide /usr/bin/g++ (g++) in auto mode
root@sundata:/data/szc/gcc-3.4# update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-3.4 0
root@sundata:/data/szc/gcc-3.4# update-alternatives --config g++
There are 2 choices for the alternative g++ (providing /usr/bin/g++).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/g++-7 1 auto mode
1 /usr/bin/g++-3.4 0 manual mode
2 /usr/bin/g++-7 1 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/g++-3.4 to provide /usr/bin/g++ (g++) in manual mode