怎样在Ubuntun12.04上编译GCC

在Ubuntun12.04编译GCC4.6.2

    本人刚接触Linux,想编译GCC,想法有点大胆,因为对于新手来说很困难,但是我跟老师一起奋斗了两周,一起在网上找方法,找资料,碰了很多壁。失败了很多次,有时候真的想放弃了,但每次有了新的进展,都重新充满信心。

    安装GCC有两种方法,一种是比较简单的方法,就是执行命令:sudo apt-getinstall gcc 但它有个缺点,就是只能安装最高版本的GCC。但是有时你需要其他特定版本的GCC。就得用第二种方法了。第二种方法是比较麻烦的方法,但它可以一次编译后,就可以打包,到其它的PC上使用。这种方法需要GCC的三个依赖库。

GCC depends on GMP (GNU Multiple PrecisionArithmetic Library), MPFR (GNU Multiple-precision floating-point roundinglibrary), MPC (GNU Multiple-precision C library), ELF (Executable and LinkableFormat library), and optionally PPL (Parma Polyhedra Library) for memoryoptimizations.

Versions

When you runthese commands, you should update them to use the current GCC version number.

好了,现在开始准备工作。

Ubuntun版本问题

我刚开始是在14.10版本上安装的,结果在安装依赖库是出现很多问题,当我在12.04版本上安装依赖库时却没有问题,关于ubuntu版本的问题网上也没说,我折腾了一周后才发现这个问题,所以如果你装的是14以上的,强烈建议重装ubuntu,装为12.04。至于12.04以下的版本没有试过。

GMP

你可以在这里下载GMP库

ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2

注意下载完后一定要看看下载的压缩包的大小是不跟提示的大小一致,下载完后执行以下命令

配置命令和他的参数必须在同一命令行,这里我们这样写是因为页面宽度,为了美观,在其它的配置命令也采用这样的写法。我把GMP,MPFR,MPC,ELF都安装在了/tmp/gcc中,在GMP安装完成后一定要去/tmp/gcc/include中看看有没有gmp.h文件,如果没有的话,你必须重新安装GMP

bunzip2 gmp-4.3.2.tar.bz2

tar xvf gmp-4.3.2.tar

cd gmp-4.3.2

./configure

--disable-shared

--enable-static

--prefix=/tmp/gcc  //把GMP安装在/tmp/gcc,gcc文件是自动生成

make && make check

sudo make install

MPFR

MPFR库依赖于GMP库,所以先安装GMP库,再安装MPFR库,MPFR库在这里下载

ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2

下载完后执行以下命令

bunzip2 mpfr-2.4.2.tar.bz2

tar xvf mpfr-2.4.2.tar

cd mpfr-2.4.2

./configure

--disable-shared

--enable-static

--prefix=/tmp/gcc       //指明MPFR库安装路径

--with-gmp=/tmp/gcc     //指明GMP安装路径

make && make check

sudo make install

MPC

MPC库依赖于GMP库和MPFR库,所以MPC库要在GMP和MPFR库之后安装,MPC可以在这里下载

ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz

然后执行以下命令

tar zxvf mpc-0.8.1.tar.gz

cd mpc-0.8.1

./configure

--disable-shared

--enable-static

--prefix=/tmp/gcc                //MPFR安装路径

--with-gmp=/tmp/gcc              //指明GMP安装路径  

--with-mpfr=/tmp/gcc             //指明MPFR安装路径 

make && make check

sudo make install

ELF

在这里下载ELF库

http://www.mr511.de/software/libelf-0.8.13.tar.gz

然后执行一下命令

tar zxvf libelf-0.8.13.tar.gz

cd libelf-0.8.13

./configure

--disable-shared

--enable-static

--prefix=/tmp/gcc       //指定ELF安装路径

make && make check

sudo make install

在安装GCC前需要做一些工作,否则在安装gcc是会报错

cannot find crti.o: No such fileor directory

解决方法

在安装GCC前执行一下下面的命令

如果Ubuntu是12.04 32 bits

cd

~$ sudo find /usr/ -name crti*

/usr/lib/i386-linux-gnu/crti.o

cd

~$ LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH

~$ export LIBRARY_PATH=/usr/lib/i386-linux-gnu/

如果Ubuntus是12.04 64 bits

cd

~$ sudo find /usr/ -name crti*

/usr/lib/x86_64-linux-gnu/crti.o

cd

~$LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH

~$exportLIBRARY_PATH=/usr/lib/x86_64-linux-gnu/

GCC

GCC is the GNU Compiler Collection.Itdepends on GMP,MPFR,MPC and ELF.

在这里下载

http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz

然后执行以下命令

tar zxvf gcc-4.6.2.tar.gz

mkdir /work/gcc/gcc-4.6.2-scratch

cd /work/gcc/gcc-4.6.2-scratch

(我的库源码和gcc源码都在/work/gcc下,所以我在/work/gcc下建立gcc-4.6.2-scratch目录,在该目录下进行configure andmake)

/work/gcc/gcc-4.6.2/configure

--disable-shared

 --disable-bootstrap

 --disable-libstdcxx-pch

 --enable-languages=all

 --enable-libgomp

 --enable-lto

 --enable-threads=posix

 --enable-tls

 --with-gmp=/tmp/gcc

 --with-mpfr=/tmp/gcc

 --with-mpc=/tmp/gcc

 --with-libelf=/tmp/gcc

 --with-fpmath=sse

make

如果不出意外,接下来你要等个一小时,但是如果报错如下

"/.libs/libgcj.so: undefined reference to `__cxa_call_unexpected' collect2:ld returned 1 exit status"

主要是红色部分

解决方法

在这里下载prims.cc文件

http://gcc.gnu.org/viewcvs/gcc/branches/ARM/embedded-4_6-branch/libjava/prims.cc?view=log&pathrev=189421

然后替换掉libjava/prims.cc这个文件,如果你不知道这个文件在哪里,运行一下命令

sudo find –name prims.cc

就会找到该文件

make

sudo make install

完成后执行

exportPATH=/usr/local/bin:$PATH

//默认gcc安装在/usr/local

运行gcc –v  

就会看到你安装的gcc版本

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值