文章标题 : Ubuntu10.04 gcc g++4.4降级4.3的问题
我依照以下方法,却得到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】
请大家帮帮忙
文章标题 : Re: Ubuntu10.04 gcc g++4.4降级4.3的问题
在我的系统上
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
就行了。