转自:http://blog.csdn.net/zyxlinux888/article/details/6708775
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此处如果不改好的话,编译时会出现错误。