ubuntu下手工切换低版本GCC

本文详细介绍了如何在Linux环境下使用GCC编译器进行版本切换,包括查看当前安装的GCC版本、安装不同版本的GCC选项、使用update-alternatives工具进行切换以及提供一种简单方法进行切换。此外,还提到了在切换GCC版本后检查和调整dash的建议。
GCC是GNU专属C/C++编译器,因为GCC存在着兼容性的问题,工作时必须用指定版本的gcc才能编译通过,因此我们应该适时的切换到相应的GCC编译器下进行工作。


1.简述:
一般情况下,编译程序都是使用的是:/usr/bin/gcc

其实这个/usr/bin/gcc只是个符号链接,它指向了/etc/alternatives/gcc,而/etc/alternatives/gcc是指向了/usr/bin/gcc-4.4, 我们可以使用ls命令查看:
zyx@zyx:/$ ls /usr/bin/gcc -l
lrwxrwxrwx 1 root root 21 2011-08-22 07:21 /usr/bin/gcc -> /etc/alternatives/gcc
zyx@zyx:/$ ls /etc/alternatives/gcc -l
lrwxrwxrwx 1 root root 16 2011-08-22 07:21 /etc/alternatives/gcc -> /usr/bin/gcc-3.4
zyx@zyx:/$

2.下面我们查看一下GCC的版本:
zyx@zyx:/$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
zyx@zyx:/$

3.看一下当前安装的GCC的各个版本:
zyx@zyx:/$ ls /usr/bin/gcc* -l
lrwxrwxrwx 1 root root     21 2011-08-22 14:43 /usr/bin/gcc -> /etc/alternatives/gcc
-rwxr-xr-x 1 root root  85552 2008-05-08 18:04 /usr/bin/gcc-3.4
-rwxr-xr-x 1 root root 224488 2010-09-28 02:43 /usr/bin/gcc-4.4
lrwxrwxrwx 1 root root      7 2011-07-05 07:38 /usr/bin/gcc.bak -> gcc-4.4
-rwxr-xr-x 1 root root  16090 2008-05-08 17:58 /usr/bin/gccbug-3.4
zyx@zyx:/$

我们看到gcc-3.4.x已经安装了,只要把符号链接(即软连接)指向gcc-3.4就可以了,下面我们用update-alternatives工具来改变符号链接。

1.分别安装gcc-3.4.6和gcc-4.3.2的可选项,使用命令如下:
zyx@zyx:/$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 50
[sudo] password for zyx:
zyx@zyx:/$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 60
zyx@zyx:/$
命令格式:sudo update-alternatives --install <链接> <名称> <路径> <优先级>

2.下面进行GCC编译器的切换,使用命令为:
zyx@zyx:/$ sudo update-alternatives --config gcc

结果是:
zyx@zyx:/$ 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-4.4   60        auto mode
  1            /usr/bin/gcc-3.4   50        manual mode
* 2            /usr/bin/gcc-4.4   60        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.

我们输入的是1,选择的是gcc-3.4版本的编译器。

3.查看一下切换后的编译器版本:

zyx@zyx:/$ gcc -v
Reading specs from /usr/lib/gcc/i486-linux-gnu/3.4.6/specs
Configured with: ../src/configure -v --enable-languages=c,c++,f77,pascal --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --with-tune=pentium4 i486-linux-gnu
Thread model: posix
gcc version 3.4.6 (Ubuntu 3.4.6-6ubuntu5)
zyx@zyx:/$


OK!!已经切换过来了。

再介绍一种简单的方法,将编译器版本切换过来:

首先把usr/bin/目录下的gcc文件删除掉或者重命名为gcc.bak。如果不删除的话,你可能会发现你使用ln -s /usr/bin/gcc-3.4 /usr/bin/gcc总是不起作用。
操作如下:

zyx@zyx:/$ sudo mv /usr/bin/gcc /usr/bin/gcc.bak
[sudo] password for zyx:
zyx@zyx:/$ sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
zyx@zyx:/$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
zyx@zyx:/$

现在已经切换过来了。如果运行ls -la /bin/sh看到链接的是 dash ,则请运行以下命令sudo dpkg-reconfigure dash选择 no 以删除 dash ,编译完成可再运行此命令选择 yes 以重新安装 dash此处如果不改好的话,编译时会出现错误。

### 如何在指定Ubuntu版本上安装特定低版本GCC编译器 #### 安装前准备 为了确保能够顺利安装所需的具体版本的 GCC 编译器,建议先更新系统的软件包列表并升级已有的软件包到最新版本。这可以通过执行以下命令完成: ```bash sudo apt update && sudo apt upgrade -y ``` #### 查找可用的GCC版本 可以利用 `apt-cache` 工具查找当前系统支持的所有 GCC 版本。对于希望找到低于默认版本的旧版 GCC 来说,此操作尤为重要。 ```bash apt-cache policy gcc ``` 这条命令会显示目前可获得的不同版本以及它们的状态信息[^1]。 #### 添加额外源(如果必要) 有时所需的较老版本可能不在官方仓库中提供,则需考虑添加第三方PPA(Personal Package Archive),比如 Ubuntu Toolchain PPA, 这样可以获得更广泛的GCC版本选择: ```bash sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update ``` #### 明确要安装的目标版本 假设目标是在Ubuntu 18.04 LTS 上重新安装更低版本如5.x系列的GCC,那么可以根据之前通过`apt-cache policy`获取的信息来决定具体哪个子版本最为合适。例如,想要安装的是5.4.0版本的话,可以直接运行如下指令进行安装: ```bash sudo apt install gcc-5 g++-5 ``` #### 设置默认使用的GCC版本 当同一台机器上有多个不同版本共存时,默认情况下可能会调用最新的那个版本。为了让系统优先使用刚安装的老版本GCC,需要调整链接指向或是设置环境变量PATH中的顺序。最简单的方式就是借助于update-alternatives工具来进行管理: ```bash sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 \ --slave /usr/bin/g++ g++ /usr/bin/g++-5 sudo update-alternatives --config gcc ``` 上述过程完成后即可实现切换至所期望的较低版本GCC环境中工作了[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值