随笔-167  评论-8  文章-0  trackbacks-0
没记错的话现在gcc的最新版本是4.2.2,但是某些软件的编译还要用到gcc4之前版本中的一些特性,某些是gcc4所不支持的,所以必须要用 gcc3.X或者gcc2.9.X。现在的Linux发行版一般都安装了gcc4.x,同时也会保留gcc3.x,一般不需要用户自己安装。如果系统没有 或者已损坏,就不得不自己动手了~本文以在Redflag Linux 6上安装gcc3.4.6为例,介绍了gcc的安装过程。

安装之前,首先要确保系统中有cc或者gcc等编译器,并且是可用的。还要把环境变量CC指向你系统上的编译器。如果系统上没有编译器,则不能编译安装 gcc源码,可以选择别人做好的gcc二进制安装包(RPM,DEB等)直接安装。本文介绍的是以源代码形式提供的gcc软件包的安装过程,此安装过程同 样适用于其它Linux和Unix系统。

系统上原来的gcc编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。但是由于gcc没有uninstall功能,所以建议把gcc的所有文件安装到同一目录下。安装步骤如下:

1. 下载

在gcc网站上(http://gcc.gnu.org/)或者通过百度一下找到下载资源。目前gcc的最新版本为 4.2.2,我用的是3.4.6。可供下载的文件一般有两种形式:gcc-3.4.6.tar.gz和gcc-3.4.6.tar.bz2,二者只是压缩 格式不一样,内容都是一样的,随便选一个下载就行了。在这里提供一个国内的下载站点:
       ftp://linuxforum.net/ftp.gcc.gnu.org/

2. 解压缩

       你可以直接在下载的文件上点右键解压文件。或者可以根据你所下载的文件,在命令行下选择下面相应的命令解压缩:
       tar xzvf gcc-3.4.6.tar.gz
或者
bzcat gcc-3.4.6.tar.bz2 | tar xvf -

解压生成的gcc-3.4.6这个目录我们称为源目录,用${srcdir}表示。下文中出现的${srcdir}应该用真实的路径来替换。
在${srcdir}/INSTALL目录下有详细的gcc安装说明,内容实在是过于详细,以致于我懒得看了。如果你有耐心,可以安装安装说明自己安装。如果你也懒得看,那就继续看下面我的安装过程。

3. 建立目标目录

目标目录我们用${objdir}表示,用来存放编译出来的文件gcc。最好不要把编译生成的文件放在源目录${srcdir]中,那样感觉有点乱。我们把这些文件存放在另外一个目录中,注意不能是${srcdir}的子目录。
在这里,我建了一个与源目录${srcdir}同级的目录,叫 gcc-build 。当然这目录的名字可以随便取。
mkdir gcc-build
cd gcc-build
下面的操作主要是在目标目录 ${objdir} 下进行,同样的,在下面的命令中用你的真实路径替换${objdir}。

4. 配置

配置的目的是决定将gcc编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令一般格式为:

${srcdir}/configure --prefix=${destdir} [其它选项]

在这里,我要把gcc3.4.6安装到/usr/local/gcc-3.4.6目录下,${destdir}就表示/usr/local/gcc-3.4.6。

下面是我安装的时候选择的配置:

../gcc-3.4.6/configure --prefix=/usr/local/gcc-3.4.6 --enable-threads=posix --disable-checking --host=pc-redflag-linux --with-system-zlib --enable-languages=c,c++,objc
其中--host=pc-redflag-linux因为我安装的时候用的红旗Linux,根据自己使用的系统改掉即可。--enable-threads=posix 是使编译使用posix多线程模型,从网上找的有人说此项为Linux系统默认,按说应该不会有问题。网友qiu建议将--enable-threads=posix的posix改为single,并且去掉--host=pc-redflag-linux,这样会更加普遍适用于不同的机型,各位酌情处理。

其中选项的具体作用请参照gcc提供的说明(gcc-3.4.6/INSTALL/configure.html)。
       这里要注意一点,--disable-checking最好带着,我安装的时候enable-checking时,configure通过后在下面的编译 过程中,程序会check所有gcc自带的编译器,在check Ada的时候出错了,导致安装失败。如果你够牛,可以自己搞定最好,如果不行就不要check了,反正也没大有影响。

5. 编译

执行make命令。这个过程比较耗费时间,大概10来分钟的样子。
       PS:我cpu PM750,1.86MHz,红旗是在虚拟机里装的。。

6. 安装

执行下面的命令会把编译好的文件拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限,如果你用的root登录那就没问题,如果不是那就根据自己的系统使用root权限):

make install

    文件拷完了gcc3.4.6安装过程也就完成了。

6. 其它设置

GCC 3.4.6的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在 lib下、头文件在include下等。
6.1 gcc、g++的设置

which gcc

在我的系统上,上述命令显示:/usr/bin/gcc。所以系统原来的gcc命令在/usr/bin目录下。我们可以把gcc 3.4.6中的gcc、g++等命令在/usr/bin目录下分别做一个符号连接:

% cd /usr/bin
% ln -s ${destdir}/bin/gcc gcc34
% ln -s ${destdir}/bin/g++ g++34

这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.6的gcc、g++来编译程序了。与此同时,系统中原来带有的其版本的gcc编译器中的gcc、g++等命令仍然可以使用。

6.2 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。

如果GCC 3.4.6安装在/usr/local/gcc-3.4.6目录下,在RedFlag Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.6/lib:$LD_LIBRARY_PATH

至此,我们的gcc就安装成功了,可以随便写个helloworld试试~~
posted on 2009-12-06 13:38 老马驿站 阅读(893) 评论(0)  编辑 收藏 引用 所属分类: linux