ubuntu下手工切换低版本GCC

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此处如果不改好的话,编译时会出现错误。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值