红联Linux门户
Linux帮助

Ubuntu gcc g++ 4.4降级到4.3

发布时间:2015-04-29 09:43:49来源:Ubuntu作者:linux人

我依照以下方法,却得到ln: creating hard link `gcc' => `/usr/bin/gcc-4.3': Invalid cross-device link 请问是什么回事呢?

将gcc-4.4降级成gcc-4.3 具体操作: sudo apt-get install gcc-4.3(安装gcc-4.3) sudo apt-get install g++-4.3(安装g++-4.3)sudo apt-get install g++-4.3-multilib (安装g++-4.3-multilib) 安装完4.3版本后,执行gcc --version后会发现版本仍然是4.4,因为gcc已经和4.4版本进行了链接,因此需要对gcc重新进行链接 具体操作: sudo ln -f /usr/bin/gcc-4.3 gcc sudo ln -f/usr/bin/g++-4.3 g++ 这样就可以用4.3版本的gcc和g++将原来的覆盖掉,重新进入Android源码目录执行make就可以正常编译
【或者可以安转gcc依赖包 apt-get install build-essential】


在我的系统上
ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 7 2009-11-10 20:40 /usr/bin/gcc -> gcc-4.4
意思是/usr/bin/gcc是/usr/bin/gcc-4.4的 soft link,不是hard link,目前我常用的都是soft link,用法是ln -s file1 file2,然后ls -l file2查看。
你的情况应该是
cd /usr/bin
sudo ln -sf cpp-4.3 cpp
sudo ln -sf gcc-4.3 gcc
sudo ln -sf g++-4.3 g++
hard link据说不支持在不同分区之间连接文件(你的/home和/在不同分区?),soft link支持。
你的命令sudo ln -f /usr/bin/gcc-4.3 gcc似乎是把/usr/bin/gcc做个hard link到当前目录下的文件gcc。
另外系统默认版本的gcc最好不要改,要改也得是同一版本,比如gcc 4.3.0改为gcc 4.3.2或gcc 4.4.0到gcc 4.4.4。从gcc 4.4改到gcc 4.3是有风险的。
有个办法使用非系统默认版本的gcc,就是自己编译gcc并安装到/opt/gcc目录下去,不用多少时间,15分钟就够了(Intel E2140,1GB RAM)。
如果你熟悉gcc的编译,这段不用看。编译前把gcc-4.3的包全部卸掉,并把gcc,cpp,g++这几个提供soft link到gcc-4.4的包重新装一遍。
安装编译gcc的依赖包gmp,mpfr,cloog-ppl,mpc,libelf,注意都要带devel或dev字样的包。
到http://gcc.cybermirror.org/releases/gcc-4.3.4/
下载源码
gcc- core*.tar.bz2是c编译器
gcc-fortran*.tar.bz2是fortran编译器
gcc- g++*.tar.bz2是g++编译器
gcc-objc*.tar.bz2是objective c编译器
一般人用到的就c,c++ 而已
mkdir ~/build
下载到home下的build目录

http://gcc.cybermirror.org/releases/gcc-4.3.4/gcc-core-4.3.4.tar.bz2

http://gcc.cybermirror.org/releases/gcc-4.3.4/gcc-g++-4.3.4.tar.bz2

cd ~/build
tar jxf gcc-core-4.3.4.tar.bz2
tar jxf gcc-g++-4.3.4.tar.bz2
cd gcc-4.3.4
mkdir build
然后
gcc -v 2> build-config.txt
打开build-config.txt
开始修改
比如我的是

Using built-in specs.
Target: i586-SUSE-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++ --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.4 --enable-ssp --disable-libssp --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.4 --enable-linux-futex --without-system-libunwind --with-arch-32=i586 --with-tune=generic --build=i586-suse-linux
Thread model: posix
gcc version 4.4.4 (SUSE Linux)


改成
../configure \
--prefix=/opt/gcc \
--enable-languages=c,c++ \
--enable-checking=release \
--enable-ssp \
--disable-libssp \
--with-bugurl=http://bugs.opensuse.org/ \
--with-pkgversion='SUSE Linux' \
--disable-libgcj --disable-libmudflap \
--with-system-zlib \
--enable-__cxa_atexit \
--enable-libstdcxx-allocator=new \
--disable-libstdcxx-pch \
--enable-version-specific-runtime-libs \
--program-suffix=-4.4 \
--enable-linux-futex \
--without-system-libunwind \
--with-arch-32=i586 \
--with-tune=generic \
--build=i586-suse-linux \
--disable-bootstrap


也就是把头尾不要,提到/usr和/lib目录的行全不要,--program-suffix那行也不要,分行,再加一行--disable-bootstrap。我的这段

../configure
...


仅供参考,具体还是要你自己改你自己的build-config.txt
现在已经在~/build/gcc-4.3.4/build目录了
把改好的build-config.txt的内容复制下来并运行,我的是

../configure \
--prefix=/opt/gcc \
--enable-languages=c,c++ \
--enable-checking=release \
--enable-ssp \
--disable-libssp \
--with-bugurl=http://bugs.opensuse.org/ \
--with-pkgversion='SUSE Linux' \
--disable-libgcj --disable-libmudflap \
--with-system-zlib \
--enable-__cxa_atexit \
--enable-libstdcxx-allocator=new \
--disable-libstdcxx-pch \
--enable-version-specific-runtime-libs \
--enable-linux-futex \
--without-system-libunwind \
--with-arch-32=i586 \
--with-tune=generic \
--build=i586-suse-linux \
--disable-bootstrap


然后
make -jN,cpu有几个核N就填几
最后
sudo make install
可选步骤
cd /opt/gcc/libexec/gcc/*/*
sudo strip -sv cc1*

最后写个脚本gcc43-env.sh放到~/bin目录,内容如下

#!/bin/sh
export PATH=/opt/gcc/bin:$PATH

你要使用gcc-4.3只用
source gcc43-env.sh
就行了。