Linux源代码下载

1.  课程设计题目:下载某个版本的linux源代码,生成一个定制的linux操作系统,完成后该系统可以用来作为启动系统使用

2.如何做的问题?

内核版本 要编译一个最新的内核,您需要首先下载它的源代码

在您下载内核的源代码前,您要知道到您要找什么。首先要问您自己的问题是-- 您需要一份稳定的还是测试版的内核? 稳定版内核通常版本号第二位用偶数数字 -- 例如, 2.0.38、2.2.15、2.2.18 和2.4.1 是被认为是“稳定”的内核(分别由于其包含 0、2、2 和4)。如果您想尝试测试版内核,您通常需要找那些版本号第二位是奇数的号码又最高的内核。例如,2.3.99 和 2.1.38都是测试版内核(分别由于其包含 3 和 1)。

内核版本历史 2.2 系列的内核被认为是较新而且稳定的内核。如果"较新"和"稳定"是您想要的,查找一个版本号的第三位是最高的2.2 内核(2.2.16是目前最新的版本)。 当 2.2 系列的内核仍在开发中,2.3 系列已经开始了。这个系列是作为将被集成到 2.4稳定版系列的新功能和高级功能的测试版。2.3 系列已经到了 2.3.99,其开发已经停止。开发人员已经开始着手2.4.0。如果您喜欢冒险使用最最新的技术,您可能想使用可以找到的最新的 2.4 系列内核。

2.4 版内核警告信息 Once a real 2.4 series kernel comes out(like 2.4.0),don't assume that the kernel is ready for use on a mission-critical system likea server. Even though 2.4 is supposed tobe a stable series, early 2.4 kernelsare likely to be not quite up tosnuff. As is often the case in the computerindustry, the first version of anything can have fairly sizable bugs. Whilethis may not be a problem if you're testing the kernel on your homeworkstation, it is a risk you may want to avoid when you machine providesvaluable services to others. 

下载内核

如果您只是想编译一个您已安装内核的新版本(例如,实现 SMP 支持),那不需要下载任何代码 -- 跳过此部分继续下一屏。

您可以在http://www.kernel.org/pub/linux/kernel上找到内核代码。当您进入到那后,您将发现内核的源代码按内核版本(v2.2、v2.3等),被组织到多个不同的目录中。在每个目录中,您将发现文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。这些就是Linux 内核的源代码。您也将看到冠以"patch-x.y.z.gz" 和"patch-x.y.z.bz2"的文件。这些是用来更新前面完整的内核源代码的补丁包。如果您希望编译一个新的内核版本,您将需要下载这些"linux"文件其中之一。

   内核解包如果您已从 kernel.org 下载一个新的内核,现在是要将其解包时候了。 首先,cd/usr/src。如果这里有一个存在的"linux"目录,将其改名为"linux.old" ("mv linux linux.old",以root 权限)。 现在,可以解开新的内核包了。

仍然在/usr/src 目录下,输入 tar xzvf/path/to/my/kernel-x.y.z.tar.gz或者 cat /path/to/my/kernel-x.y.z.tar.bz2| bzip2 -d | tarxvf -,根据您下载的源代码是用 gzip 或 bzip2压缩的。在输入完此命令后,您下载的内核源代码会被释放到一个新的"linux"目录下。注意 -- 全套内核源代码通常将在硬盘上占用超过 50兆空间!



Index of /pub/linux/kernel

Name                    Last modified      Size  
 
 
Parent Directory                             -   
Historic/               20-Mar-2003 22:38    -   
SillySounds/            14-Apr-2000 18:55    -   
crypto/                 24-Nov-2001 14:54    -   
people/                 03-Nov-2010 18:25    -   
ports/                  13-Mar-2003 01:34    -   
projects/               26-Oct-2007 20:58    -   
testing/                14-Feb-2002 05:32    -   
uemacs/                 20-Mar-2003 23:31    -   
v1.0/                   20-Mar-2003 22:58    -   
v1.1/                   20-Mar-2003 22:58    -   
v1.2/                   20-Mar-2003 22:58    -   
v1.3/                   20-Mar-2003 23:02    -   
v2.0/                   08-Feb-2004 09:17    -   
v2.1/                   20-Mar-2003 23:12    -   
v2.2/                   24-Mar-2004 19:22    -   
v2.3/                   20-Mar-2003 23:23    -   
v2.4/                   06-Sep-2010 05:43    -   
v2.5/                   14-Jul-2003 03:50    -   
v2.6/                   29-Oct-2010 05:13    -   
COPYING                 13-Mar-1994 00:00   18K  
CREDITS                 16-Sep-1996 16:36   36K  
README                  16-Sep-1996 16:36   12K  

Index of /pub/linux/kernel/v2.4

Name                              Last modified      Size  
 
 
Parent Directory                                       -   
old-test-kernels/                 20-Mar-2003 23:30    -   
snapshots/                        01-Jun-2005 09:47    -   
testing/                          02-Dec-2008 08:13    -   
ChangeLog-2.4.1                   30-Jan-2001 07:57  2.5K  
ChangeLog-2.4.2                   22-Feb-2001 01:02  2.4K  
ChangeLog-2.4.3                   30-Mar-2001 05:02  2.5K  
ChangeLog-2.4.4                   28-Apr-2001 01:43  2.6K  
ChangeLog-2.4.5                   26-May-2001 01:25  3.1K  
ChangeLog-2.4.6                   04-Jul-2001 00:06  4.3K  
ChangeLog-2.4.7                   20-Jul-2001 21:24  2.6K  
 
 
。。。。
ChangeLog-2.4.36.2                24-Feb-2008 20:51  276   
ChangeLog-2.4.36.3                19-Apr-2008 14:41  584   
ChangeLog-2.4.36.4                07-May-2008 04:19  266   
  
ChangeLog-2.4.37.8                31-Jan-2010 09:30  485   
ChangeLog-2.4.37.9                01-Feb-2010 21:12  200   
ChangeLog-2.4.37.10               06-Sep-2010 05:38  867   
LATEST-IS-2.4.37.10               06-Sep-2010 05:38    0   
drm-4.0.x.tar.bz2                 09-Aug-2001 23:29  102K  
drm-4.0.x.tar.bz2.sign            09-Aug-2001 23:29  248   
drm-4.0.x.tar.gz                  09-Aug-2001 23:29  156K  
drm-4.0.x.tar.gz.sign             09-Aug-2001 23:29  248   
drm-4.0.x.tar.sign                09-Aug-2001 23:29  248   
linux-2.4.0.tar.bz2               04-Jan-2001 23:45   19M  
linux-2.4.0.tar.bz2.sign          04-Jan-2001 23:45  248   
linux-2.4.0.tar.gz                04-Jan-2001 23:45   23M  
linux-2.4.0.tar.gz.sign           04-Jan-2001 23:45  248   
  
linux-2.4.2.tar.bz2               22-Feb-2001 01:00   20M  
linux-2.4.2.tar.bz2.sign          22-Feb-2001 01:00  248   
linux-2.4.2.tar.gz                22-Feb-2001 01:00   24M  
linux-2.4.2.tar.gz.sign           22-Feb-2001 01:00  248   
linux-2.4.2.tar.sign              22-Feb-2001 01:00  248   
linux-2.4.3.tar.bz2               30-Mar-2001 05:03   20M  
linux-2.4.3.tar.bz2.sign          30-Mar-2001 05:03  248   
linux-2.4.3.tar.gz                30-Mar-2001 05:03   25M  
linux-2.4.3.tar.gz.sign           30-Mar-2001 05:03  248   
linux-2.4.3.tar.sign              30-Mar-2001 05:03  248   
linux-2.4.4.tar.bz2               28-Apr-2001 01:43   20M  
linux-2.4.4.tar.bz2.sign          28-Apr-2001 01:43  248   
linux-2.4.4.tar.gz                28-Apr-2001 01:43   25M  
linux-2.4.4.tar.gz.sign           28-Apr-2001 01:43  248   
linux-2.4.4.tar.sign              28-Apr-2001 01:43  248   
linux-2.4.5.tar.bz2               26-May-2001 01:26   21M  
 
linux-2.4.7.tar.gz                20-Jul-2001 21:25   26M  
linux-2.4.7.tar.gz.sign           20-Jul-2001 21:25  248   
linux-2.4.7.tar.sign              20-Jul-2001 21:25  248   
  
linux-2.4.9.tar.sign              16-Aug-2001 18:32  248   
  
linux-2.4.14.tar.gz.sign          05-Nov-2001 23:30  248   
linux-2.4.14.tar.sign             05-Nov-2001 23:30  248   
linux-2.4.15.tar.bz2              23-Nov-2001 06:18   23M  
linux-2.4.15.tar.bz2.sign         23-Nov-2001 06:18  248   
linux-2.4.15.tar.gz               23-Nov-2001 06:18   28M  
linux-2.4.17.tar.bz2              21-Dec-2001 17:52   23M  
linux-2.4.17.tar.bz2.sign         21-Dec-2001 17:52  248   
linux-2.4.17.tar.gz               21-Dec-2001 17:52   28M  
 
 
…  
linux-2.4.36.8.tar.sign           19-Oct-2008 21:25  248   
linux-2.4.36.9.tar.bz2            09-Nov-2008 22:42   30M  
linux-2.4.36.9.tar.bz2.sign       09-Nov-2008 22:42  248   
linux-2.4.36.9.tar.gz             09-Nov-2008 22:42   37M  
linux-2.4.36.9.tar.gz.sign        09-Nov-2008 22:42  248   
 
linux-2.4.37.1.tar.bz2.sign       19-Apr-2009 18:45  248   
linux-2.4.37.1.tar.gz             19-Apr-2009 18:45   37M  
linux-2.4.37.1.tar.gz.sign        19-Apr-2009 18:45  248   
linux-2.4.37.1.tar.sign           19-Apr-2009 18:45  248   
linux-2.4.37.2.tar.bz2            07-Jun-2009 19:53   30M  
linux-2.4.37.2.tar.bz2.sign       07-Jun-2009 19:53  248   
  
linux-2.4.37.6.tar.gz             13-Sep-2009 09:41   37M  
linux-2.4.37.6.tar.gz.sign        13-Sep-2009 09:41  248   
linux-2.4.37.6.tar.sign           13-Sep-2009 09:41  248   
linux-2.4.37.tar.bz2              02-Dec-2008 08:13   30M  
linux-2.4.37.tar.bz2.sign         02-Dec-2008 08:13  248   
 
patch-2.4.1.sign                  30-Jan-2001 07:56  248   
patch-2.4.2.bz2                   22-Feb-2001 01:00  1.1M  
 
  
patch-2.4.6.bz2                   04-Jul-2001 00:07  1.3M  
patch-2.4.6.bz2.sign              04-Jul-2001 00:07  248   
patch-2.4.6.gz                    04-Jul-2001 00:07  1.7M  
patch-2.4.6.gz.sign               04-Jul-2001 00:07  248   
patch-2.4.6.sign                  04-Jul-2001 00:07  248   

3. 在Linux下编译内核

 现在我们来学习在Linux下编译内核。 编译之前,必须知道为什么要编译内核以及内核是一个什么样的东西。

    Linux操作系统包括四个部分:

    实用工具集;shell;系统程序和运行期库;内核

    内核所起的作用——可以为其他所有的程序以及服务提供运行环境,分配各种软硬件资源

    在操作系统中,内核的作用类似于人的大脑。

    由于LInux操作系统,是一个开源软件,开放所有的源代码,这为我们定制内核提供了便利条件;

    在Windows操作系统 中,我们常常被很多问题困扰,比如说我们的操作系统在使用一段时间之后,会发现运行速度越来越慢,操作系统所在的磁盘分区容量越来越多,但是由于windows系统不开源,我们不知道为什么会出现这种情况。不过在linux中,由于所有的内核代码都是开放的,所以只要我们有足够的能力,就可以对这个内核进行定制,以满足我们自己的需求。

    这种定制包括:

    我们的硬件功能很强,包括很多附加设备。但是使用的linux操作系统目前没有打开对这些功能和设备的支持,因此可以通过内核编译去获取这些功能。

    反过来,如果我们的硬件功能很弱,而linux系统中自带的很多功能和硬件的支持我们都不需要,也可以通过内核定制和编译去掉这些功能以加强我们的系统性能。或者杜绝一些错误和漏洞的存在。

    总之,因为linux系统中给我们提供了定制内核的条件(开源),我们就应该和有能力使用这个条件去打造适合我们自己需要的操作系统。

好了,我们知道了为什么要进行内核编译,下面介绍一下内核编译的步骤:

    1.在编译之前,我们要了解当前计算机的软硬件信息。

     由于/proc目录下存储的是当前内存的运行值,其实这个文件夹不是硬盘中的数据,而是内存中的数据,因此我们可以通过这个目录下的文件来获得当前系统的硬件环境信息。比如说cpu、内存、文件系统、pci设备、版本等相关信息。

   可以通过less命令看到 cpuinfo meminfo pci filesystem partition version等信息

     2.然后第二步,开始获取内核源代码包:

       内核源代码包获取分两种情况,第一种是通过在系统安装光盘中获得当前系统的内核源码,这种内核包的格式多数是rpm的

       第二种是通过在www.kernel.org获得更高版本的内核源码,这种内核包的格式多数是tar.gz的

    我们现在来讨论第一种方法,从光盘获取——需要挂载第二张光盘。大家刚才看到的这个37M的软件包就是内核源码包

    如果没有安装的话,我们使用rpm -ihvkernel-source-2.4.20-8.i386.rpm命令来安装,如果成功,该包会安装在/usr/src目录下,产生一个linux-2.4.20的文件夹,里面就是内核源码的内容

3.但是上面这一步的执行,需要系统的一些底层环境的支持,也就是说需要事前在系统中具备和安装相应的软件包。否则无法安装内核包,或者安装内核包之后,会在下一步操作中提示出错。

这些软件包括:gcc ncurses make dev86 glibc-kernheader cpp binutils

    那么我们现在先来检查一下——使用rpm -qa |grep packagename就行


 好了,看来该装的软件都已经有了,所以执行rpm –ihv

kernel-source-2.4.20-8.i386.rpm就行了。

    4.安装完成之后,我们的/usr/src目录里面就有了内核的源码文件:

      就是刚才显示出来的两个目录,其实都是一个目录,另一个链接文件指向的是linux-2.4.20目录,

      所以cd /usr/src   cd linux-2.4.20

    5.现在开始编译:(由于2.4和2.6内核的编译方法不是完全一样,所以我们分开两种情况讨论)

      编译2.4内核:   编译2.6内核

      第一步:make mrproper --清理内核源代码树(清理垃圾信息)  make mrproper

      第二步:make menuconfig   --配置内核以及内核模块     make menuconfig   相关的命令还有make config、make oldconfig、make xconfig)

(交互问答式)(通过旧内核生成)(图形界面下编译)

 我们在这里推荐使用make menuconfig这种方法操作最方便最直接      在进入内核配置菜单之后,原则上,自己有把握的可以更改,没有把握的切记不要乱改,否则会导致编译失败。

 另外更改的时候,如果出现*,表示编译进入内核————随系统启动而启动   M,表示编译进入模块————不随系统启动而启动,在需要的时候调用(一些不重要的外部驱动程序就可以作为内核模块编译,这样内核不会过大,也不会影响启动速度)空,表示不编译进入内核也不编译进入模块————放弃这个功能,如果系统不支持这类功能,可以放弃

好了下面开始更改。


大家看到了,我改了不少。现在我都不知道能否编译成功。

      但其中有一点需要注意:NTFS一定要编译进入内核而不是模块;另外,没有把握的不要乱改;

还有,内核编译我认为具有很大随机性,编译不成功很正常,比如说我现在的更改就不能保证可以成功。

   完成之后,将配置起一个名字,另外最后将其保存。

  最后退出的时候,提示保存,这里会将刚才的配置保存为一个名称为.config的配置文件,不管我们使用make menuconfig还是

   make oldconfig、make xconfig、make config,最终都为了生成这个.config文件,以后所有的操作,就会根据这个文件中的内容进行

这个文件,存储的就是我们刚才所做的改动,可以less .config查看一下

      第三步:make dep --生成依赖性关系

      第四步:make bzImage --生成新内核             make   (2.6内核中将左边三个步骤简化为make)

      第五步:make modules --编译内核模块

      这三个步骤执行的时间比较长,所以,慢慢等吧!刚才这一步是执行时间最长的一步。

  第六步:make modules_install --安装内核模块

      第七步:make install  --安装内核                       (所有的编译步骤最好在字符界面下进行,否则在图形界面下速度会比较慢)

      另外上面所提到的所有步骤,任何一步完成之后都要检查有没有出错,就是有没有显示error的字样,如果显示任何一步出错都要退回到

      make mrproper重来

            大家看到了,我们所有的步骤我刚才都执行完了,没有报错,似乎情况还不错。

      但是不要高兴太早,还要进行进一步测试:

      1. vi /etc/grub.conf  ---->查看是否有新的内核启动项生成(刚才带custom这一项就是新的内核启动项,这步没问题)

      2. ls /boot   ---->查看是否有新的内核文件vmlinuz生成(刚才带custom这一项就是新的内核文件,这步也没有问题)

现在差不多行了,但是还要重启,看是否可以新的内核启动系统

 以新的启动项进入:

 看来已经可以进入系统了,但是在sendmail服务这里会比较慢应该事先将该服务关闭,不过这不会影响新的内核启动。继续等待。。。

我现在已经成功进入系统了,那么执行uname -a 检查一下我们现在是否使用新内核:

      显示使用的内核是2.4.20-8custom,证明内核编译成功!

4. linux gcc 下载地址和安装











但是gcc-4.2.0.tar.bz2是必须的!

把各个包解压,他们会都存入一个gcc-4.2.0的文件夹,然后执行./configure   ----->make ------->make install 即可!其中make过程是相当漫长的^_^!

gcc --version 测试!

 

 GCC mirror sites

These sitesmirror the gcc.gnu.org FTP site (Phoenix, Arizona, USA)directly.

Ourreleases are also available on the GNU FTPserver and its mirror sites. The archives there will be signed byone of the following GnuPG keys:

Austria: gd.tuwien.ac.at,thanks to Antonin dot Sprinzl at tuwien dot ac dot at

Bulgaria: gcc.igor.onlinedirect.bg,thanks to igor at onlinedirect dot bg

Canada: http://gcc.parentingamerica.com,thanks to James Miller (jmiller at parentingamerica dot com).

Canada: http://gcc.skazkaforyou.com,thanks to Sergey Ivanov (mirrors at skazkaforyou dot com)

China: ftp://linuxforum.net/ftp.gcc.gnu.org/,thanks to David Deng (david99deng at yahoo dot com)

France (nosnapshots): ftp.lip6.fr,thanks to ftpmaint at lip6 dot fr

France, Brittany: ftp.irisa.fr, thanks to ftpmaint at irisa dot fr

France, Versailles:ftp.uvsq.fr,thanks to ftpmaint at uvsq dot fr

Germany, Berlin:ftp.fu-berlin.de, thanks to ftp at fu-berlin dot de

Germany: ftp.gwdg.de,thanks to emoenke at gwdg dot de

Germany: ftp.mpi-sb.mpg.de, thanks to ftpadmin atmpi-sb.mpg dot de

Germany: http://gcc.cybermirror.org,thanks to Sascha Schwarz (cm at cybermirror dot org)

Greece: ftp.ntua.gr,thanks to ftpadm at ntua dot gr

Hungary, Budapest:robotlab.itk.ppke.hu,thanks to Adam Rak (neurhlp at gmail dot com)

Japan: ftp.dti.ad.jp,thanks to IWAIZAKO Takahiro (ftp-admin at dti dot ad dot jp)

Japan: ring.etl.go.jp

The Netherlands, Nijmegen: ftp.nluug.nl,thanks to Jan Cristiaan van Winkel (jc at ATComputing dot nl)

Index of /

 Name                    Last modified      Size  Description



 infrastructure/         27-Aug-2010 20:10    -  

 libstdc++/              18-Dec-2007 04:22    -  

 old-releases/           18-Jun-2001 04:57    -  

 releases/               13-Nov-2010 17:34    -  

 snapshots/              13-Nov-2010 17:34    -  

 summit/                 13-Nov-2010 17:34    -  

 README                  25-Apr-2003 08:09  765  

 md5.sum                 10-Mar-2010 22:01   41   


This mirroris sponsored by the very best kids clothing and kids shoes directory onthe net!

Index of/releases

 Name                    Last modified      Size  Description


 ParentDirectory                             -  

 egcs-1.1.2/             28-Aug-1999 08:58    -  

 gcc-2.95.1/             28-Aug-1999 08:57    -  

 gcc-2.95.2.1/           11-Dec-2000 16:48    -  

 gcc-2.95.2/             28-Oct-1999 05:29    -  

 gcc-2.95.3/             19-Mar-2001 22:48    -  

 gcc-2.95/               28-Aug-1999 08:57    -  

 gcc-3.0.1/              20-Aug-2001 07:48    -  

 gcc-3.0.2/              26-Oct-2001 20:07    -  

 gcc-3.0.3/              20-Dec-2001 23:48    -   


 gcc-3.0.4/              22-Feb-2002 01:45    -  

 gcc-3.0/                17-Jun-2001 23:48    -  

 gcc-3.1.1/              26-Jul-2002 08:00    -  

 gcc-3.1/                15-May-2002 07:32    -  

 gcc-3.2.1/              09-Jan-2003 14:54    -  

 gcc-3.2.2/              05-Feb-2003 04:54    -  

 gcc-3.2.3/              22-Apr-2003 11:54    -  

 gcc-3.2/                15-Aug-2002 05:58    -  

 gcc-3.3.1/              12-Aug-2003 21:25    -  

 gcc-3.3.2/              17-Oct-2003 09:54    -  

 gcc-3.3.3/              15-Feb-2004 01:54    -  

 gcc-3.3.4/              01-Jun-2004 05:54    -  

 gcc-3.3.5/              30-Sep-2004 21:07    -  

 gcc-3.3.6/              03-May-2005 14:08    -  

 gcc-3.3/                16-May-2003 09:31    - 

 gcc-3.4.0/              20-Apr-2004 09:54    -  

 gcc-3.4.1/              06-Jul-2004 18:09    -  

 gcc-3.4.2/             07-Sep-2004 04:07    -  

 gcc-3.4.3/              05-Nov-2004 06:09    -  

 gcc-3.4.4/              19-May-2005 18:07    -  

 gcc-3.4.5/              01-Dec-2005 05:20    -  

 gcc-3.4.6/              06-Mar-2006 07:00    -  

 gcc-4.0.0/              21-Apr-2005 09:07    -  

 gcc-4.0.1/              08-Jul-2005 02:10    -  

 gcc-4.0.2/              29-Sep-2005 01:07    -  

 gcc-4.0.3/              10-Mar-2006 09:07    -  

 gcc-4.0.4/              31-Jan-2007 13:14    -  

 gcc-4.1.0/              28-Feb-2006 21:10    -  

 gcc-4.1.1/              25-May-2006 03:07    -  

 gcc-4.1.2/              14-Feb-2007 09:07    -   


 gcc-4.2.0/              14-May-2007 20:07    -  

 gcc-4.2.1/              20-Jul-2007 04:07    -  

 gcc-4.2.2/              08-Oct-2007 22:07    -  

 gcc-4.2.3/              01-Feb-2008 19:07    -  

 gcc-4.2.4/              19-May-2008 17:07    -  

 gcc-4.3.0/              05-Mar-2008 19:44    -  

 gcc-4.3.1/              06-Jun-2008 16:33    -  

 gcc-4.3.2/              27-Aug-2008 21:07    -  

 gcc-4.3.3/              26-Jan-2009 19:01    -  

 gcc-4.3.4/              04-Aug-2009 14:02    -  

 gcc-4.3.5/              22-May-2010 21:01    -  

 gcc-4.4.0/              21-Apr-2009 11:01    -  

 gcc-4.4.1/              22-Jul-2009 09:39    -  

 gcc-4.4.2/              15-Oct-2009 10:01    -  

 gcc-4.4.3/              21-Jan-2010 13:01    -   

 gcc-4.4.4/              29-Apr-2010 10:55    -   

 gcc-4.4.5/              01-Oct-2010 10:34    -  

 gcc-4.5.0/              14-Apr-2010 12:01    -  

 gcc-4.5.1/              31-Jul-2010 11:01    -  


This mirror issponsored by the very best kids clothing and 

kids shoesdirectory on the net!

Index of/releases/gcc-4.2.0



 Parent Directory                                 -    diffs/                      14-May-2007 20:07    -  

 gcc-4.2.0.tar.bz2           14-May-2007 06:23   42M  

 gcc-ada-4.2.0.tar.bz2       14-May-2007 06:24  4.5M 

  gcc-core-4.2.0.tar.bz2      14-May-2007 06:25   18M 

 gcc-fortran-4.2.0.tar.bz2   14-May-2007 06:24  957K 

  gcc-g++-4.2.0.tar.bz2       14-May-2007 06:24  4.6M  

 gcc-java-4.2.0.tar.bz2      14-May-2007 06:24   10M 

 gcc-objc-4.2.0.tar.bz2      14-May-2007 06:24  193K  

 gcc-testsuite-4.2.0.tar.bz214-May-2007 06:24  3.7M 

 md5.sum                     14-May-2007 20:07  457  


This mirroris sponsored by the very best kids clothing and kids shoes directory onthe net!

Linux自带GCC  和   g++的

GCC参数详解 

gcc  and   g++分别是gnu的c   &   c++编译器  

gcc/g++在执行编译工作的时候,总共需要4步  

1.预处理,生成.i的文件  

2.将预处理后的文件不转换成汇编语言,生成文件.s  

3.有汇编变为目标代码(机器代码)生成.o的文件  

4.连接目标代码,生成可执行程序   

[参数详解] 

-x  language   filename    

  设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根  

   据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果  

   你很个性,决定你的C代码文件的后缀名是.pig   哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。

    可以使用的参数吗有下面的这些  

 

 `c ',   `objective-c ',   `c-header',   `c++ ',   `cpp-output ',      `assembler ',   and  `assembler-with-cpp '.  
     看到英文,应该可以理解的。  

    例子用法:   gcc   -x   c  hello.pig  

-x   none  filename  

关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型   例子用法:  

gcc  -x   c   hello.pig   -x   none   hello2.c       -c    

  只激活预处理,编译,和汇编,也就是他只把程序做成obj文件     例子用法: 

  gcc  -c   hello.c  

  他将生成.o的obj文件   

-S  

  只激活预处理和编译,就是指把文件编译成为汇编代码。  

  例子用法  

  gcc  -S   hello.c  

  他将生成.s的汇编代码,你可以用文本编辑器察看  

-E  

  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里   面.   

  例子用法:  

  gcc  -E   hello.c   >   pianoapan.txt  

  gcc  -E   hello.c   |   more  

  慢慢看吧,一个hello   word   也要与处理成800行的代码  

-o     制定目标名称,缺省的时候,gcc   编译出来的文件是a.out,很难听,如果     你和我有同感,改掉它,哈哈  

  例子用法  

  gcc  -o   hello.exe   hello.c   (哦,windows用习惯了)  

  gcc  -o   hello.asm   -S   hello.c  

-pipe 

  使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题  

  gcc  -pipe   -o   hello.exe   hello.c  

-ansi 

  关闭gnu  c中与ansi   c不兼容的特性,激活ansi   c的专有特性(包括禁止一 些asm   inline   typeof关键字,以及UNIX,vax等预处理宏,   -fno-asm  

  此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。  

      -fno-strict-prototype  

  只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.     而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型  

    -fthis-is-varialble  

  就是向传统c++看齐,可以使用this当一般变量使用.  

    -fcond-mismatch  

  允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型 

    -funsigned-char  

-fno-signed-char   

-fsigned-char 

-fno-unsigned-char 

  这四个参数是对char类型进行设置,决定将char类型设置成unsigned   char(前  

  两个参数)或者   signed   char(后两个参数)  
     -include   file  

  包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以  

  用它设定,功能就相当于在代码中使用#include <filename>    例子用法:  

  gcc  hello.c   -include   /root/pianopan.h  

    -imacros   file  

将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中

-Dmacro 

  相当于C语言中的#define   macro  

    -Dmacro=defn  

  相当于C语言中的#define   macro=defn  

   

-Umacro 

  相当于C语言中的#undef   macro  

-undef 

  取消对任何非标准宏的定义  

   

-Idir 

在你是用#include"file "的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.  

  对于#include<file> ,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找  

    -I-  

  就是取消前一个参数的功能,所以一般在-Idir之后使用   

   

-idirafter  dir  

  在-I的目录里面查找失败,讲到这个目录里面查找.  

   -iprefix   prefix  

-iwithprefix  dir  

  一般一起使用,当-I的目录查找失败,会到prefix+dir下查找        -nostdinc  

  使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置  

    -nostdin   C++  

  规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建  

  libg++库使用  

    -C  

  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很  

  方便的      

-M  

  生成文件关联的信息。包含目标文件所依赖的所有源代码     你可以用gcc   -M   hello.c来测试一下,很简单。  

   -MM  

  和上面的那个一样,但是它将忽略由#include <file> 造成的依赖关系。  
    

-MD  

  和-M相同,但是输出将导入到.d的文件里面  
    

-MMD  

  和-MM相同,但是输出将导入到.d的文件里面  
     -Wa,option  

  此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序       

-Wl.option   

 此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.  

-llibrary   

  制定编译的时候使用的库  

  例子用法  

  gcc  -lcurses   hello.c  

  使用ncurses库编译程序  

 -Ldir  

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。       

-O0  

-O1  

-O2  

-O3  

  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-g  

只是编译器,在编译的时候,产生条是信息。  

-gstabs 

此选项以stabs格式声称调试信息,但是不包括gdb调试信息.  -gstabs+  

此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.-ggdb  

查看内核版本和相应的gcc版本号:      dmesg| grep gcc       output:   debian内核2.6.22-3-686   gcc 版本号4.1.3

查看gcc版本:#gcc--version          output:    4.2.3

查看debian内核版本:#uname -r      output:    2.6.22-3-686

使用跟内核编译同样版本的GCC,2.6.22的内核是GCC4.1编译的,而默认最新的是4.2.3,所以要到/usr/bin下把名为gcc的链接删掉重新建一个指向gcc4.1的软链接:“ln -s /usr/bin/gcc-4.1/usr/bin/gcc”


GCC的应用

现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。本文以在Redhat Linux安装GCC4.1.2为例(因在项目开发过程中要求使用,没有用最新的GCC版本),介绍Linux安装GCC过程。

安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 4.1.2。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。

系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中采用这个方案安装GCC4.1.2,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。

1 下载

在GCC网站上(http://gcc.gnu.org)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 4.2.1。可供下载的文件一般有两种形式:gcc-4.1.2.tar.gz和gcc-4.1.2.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2. 解压缩

拷贝gcc-4.1.2.tar.bz2(我下载的压缩文件)到${srcdir}/usr/local/src(根据自己喜好选择)下,根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar zxvf gcc-4.1.2.tar.gz

或者

% bzcat gcc-4.1.2.tar.bz2| tar xvf -

新生成的gcc-4.1.2这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫${objdir} /usr/local/gcc-4.1.2的目标目录:

% mkdir /usr/local/gcc-4.1.2

% cd gcc-4.1.2

以下的操作主要是在目标目录 ${objdir} 下进行。(否则会出错,后面有解释)

4. 配置

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

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

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

例如,如果想将GCC 4.1.2安装到/usr/local/gcc-4.1.2目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

% ../gcc-4.1.2/configure--prefix=/usr/local/gcc-4.1.2 --enable-threads=posix --disable-checking--enable--long-long --host=i386-redhat-linux--with-system-zlib--enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-4.1.2目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

5. 编译

% make

6. 安装

执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 4.1.2安装过程就完成了。

7. 其它设置

GCC 4.1.2的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在 lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

7.1 gcc、g++、gcj的设置

要想使用GCC 4.1.2的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

首先,查看原来的gcc所在的路径:

% which gcc

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

% cd /usr/bin

% ln -s ${destdir}/bin/gcc gcc412

% ln -s ${destdir}/bin/g++ g++412

% ln -s ${destdir}/bin/gcj gcj412

这样,就可以分别使用gcc412、g++412、gcj412来调用GCC 4.1.2的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

(cool,我感觉棒极了!!1)

7.2 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,例如,如果GCC 4.1.2安装在/usr/local/gcc-4.1.2目录下,在RH Linux下可以直接在命令行上执行

% export LD_LIBRARY_PATH=/usr/local/gcc-4.1.2/lib

最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,在文件$HOME/.bash_profile中添加下面两句:

LD_LIBRARY_PATH=/usr/local/gcc-4.1.2/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH

重启系统设置生效,或者执行命令

% source $HOME/.bash_profile

用新的编译命令(gcc412、g++412等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

完成了Linux安装GCC,之后你就能轻松地编辑了。

from:os.51cto.com/art/200912/168804.htm

在RHLinux下安装gcc-4.0.1方法比较简单,但是安装过程中有些环节是需要注意的,否则,可能会导致安装不成功,或者安装报错。具体安装过程如下:

首先,下载并解压缩gcc的RPM包至源目录(如/opt/gcc-4.0.1)

1、解压缩RPM包:

[root@linux opt]# tar xjvf gcc-4.0.1.tar.bz2(解压后生成源目录/opt/gcc-4.0.1)

2、创建安装目标目录:

[root@linux opt]# mkdir /usr/local/gcc-4.0.1/

3、进入安装目标目录:

[root@linux opt]# cd /usr/local/gcc-4.0.1/(这一步很重要,配置安装文件时,需要在目标目录下执行configure命令)

[root@linux opt]# pwd

/usr/local/gcc-4.0.1

4、配置安装文件:

[root@linux gcc-4.0.1]#/opt/gcc-4.0.1/configure --prefix=/usr/local/gcc-4.0.1/ (这一步非常重要,需要在安装的目标目录下,执行源目录 /opt/gcc-4.0.1/中的configure命令,配置将gcc安装到目标目录/usr/local/gcc-4.0.1/)

creating cache ./config.cache

checking host system type...i686-pc-linux-gnu

5、编译安装文件:

[root@linux gcc-4.0.1]#pwd

/usr/local/gcc-4.0.1

[root@linux gcc-4.0.1]#make (在目标目录下执行编译)

6、安装gcc:

[root@linux gcc-4.0.1]#pwd

/usr/local/gcc-4.0.1

[root@linux gcc-4.0.1]#make install (在目标目录下执行安装)

如果安装过程中步骤和命令没有错误,你肯定能安装成功。

一个例子

redhat linux上安装 gcc编译器

Linux软件安装通用思路

 

在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种:

  1)一种是软件的源代码,您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。

  2)另一种是软件的可执行程序,你只要安装它就可以了。这种软件安装包通常被是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。

  当然,也有用rpm格式打包的源代码,用gzip压缩过的可执行程序包。只要您理解了以下的思路,这两种形式的安装包也不在话下了。

下面,我们就分成两个部分来说明软件安装思路:

第一部分:搞定.tar.gz

 

  1.首先,使用tar -xzvf来解开这个包,如:

  #tar -xzvf apache_1_3_6_tar.gz

  这样就会在当前目录中创建了一个新目录(目录名与.tat.gz包的文件名类似),用来存放解压了的内容。如本例中就是apache_1.3.6

  2.进入这个目录,再用ls命令查看一下所包含的文件,如:

  #cd apache_1.3.6

  #ls

  你观察一下这个目录中包含了以下哪一个文件:configure、Makefile还是Imake。

  1)如果是configure文件,就执行:

  #./configure

  #make

  #make install

  2)如果是Makefile文件,就执行:

  #make

  #make install

  3)如果是Imake文件,就执行:

  #xmkmf

#make

  #make install

  3.如果没有出现什么错误提示的话,就搞定了。至于软件安装到什么地方,通常会在安装时出现。否则就只能查阅一下README,或者问问我,:-)

  如果遇到错误提示,也别急,通常是十分简单的问题:

  1)没有安装CC++编译器;

  确诊方法:执行命令gccC++则为g++),提示找不到这个命令。

  解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:

  #rpm -ivh gcc* (哈哈,我们用到了第二种安装方式)

  2)没有安装make工具;

  确诊方法:执行命令make,提示找不到这个命令。

  解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:

  #rpm -ivh make*

  3)没有安装autoconf工具;

  确诊方法:执行命令autoconf,提示找不到这个命令。

  解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:

  #rpm -ivh autoconf*

  4)缺少某些链接库;

  确诊方法:在make时,提示需要某些文件。

  解决方法:安装包含这个文件的包,这就需要积累了。

第二部分:搞定.rpm

  RPMRed Hat公司随Redhat Linux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。

  1.安装软件:执行rpm -ivhrpm包名,如:

  #rpm -ivh apache-1.3.6.i386.rpm

  2.升级软件:执行rpm -Uvhrpm包名。

   3.反安装:执行rpm -e rpm包名。

  4.查询软件包的详细信息:执行rpm-qpi rpm包名

  5.查询某个文件是属于那个rpm包的:执行rpm -qf rpm包名

  6.查该软件包会向系统里面写入哪些文件:执行 rpm -qpl rpm包名

[遗留问题:redhat linux系统上有Redhat Linux Packet Manager,就是Redhat的包管理器,所以如果原来机器没装gcc编译器,装二进制码格式的编译器时,就可以直接下载相适应的rpm包来搞定。可是其它变种的linux系统怎么办呢? 有相应格式的二进制编译器软件还是说也可以使用redhatrpm?]

---ANSWER:其他的发行版也有相应的包管理器,比如debian的包管理器叫dpkggentoo的好像可以merge等等。

下面,先再来一篇关于安装可执行程序的文章,说明一下,我用的机器装的是redhat9.0strike版,所以我就在学校的ftp上下载了相应版本的is0光盘影响文件(3张盘),用虚拟光驱虚拟出三张盘来,便于后面找依赖的rpm格式的其它包的便利。基本上,我装的过程和他的一样,只是不它还多装了个binutils.

--------------------------begin

quick linux中安装gcc的详细步骤

需要的东东有 :

glibc-devel-2.3.2-11.9.i386.rpm

glibc-kernheaders-2.4-8.10.i386.rpm

gcc-3.2.2-5.i386.rpm

cpp-3.2.2-5.i386.rpm

首先安装gcc ,这是因为以后要用到gcc编译gcc gcc-4.1.0

1.首先要下载到软件包复制到相关目录

   我用的包是包是gcc-3.4.6.9.i386.rpm  这个包一般是在安装盘的RPMS目录下可以用命令find gcc* 找到

   输入命令rpm -i gcc-3.4.6-9.i386.rpm

一般会出现一下提示    error: Failed dependencies:

       cpp = 3.2.3-34 is needed bygcc-3.2.3-34

       glibc-devel >= 2.2.90-12 is needed by gcc-3.2.3-34

       libgcc >= 3.2.3-34 is needed bygcc-3.4.6-9

      Suggested resolutions:

       glibc-devel-2.3.2-95.3.i386.rpm

这就是说在安装rpm -i gcc-3.4.6-9.i386.rpm时还得需要glibc-devel-2.3.2-95.3.i386.rpm

输入命令rpm -i gcc-3.4.6-9.i386.rpmglibc-devel-2.3.2-95.3.i386.rpm

    还会出现缺少包的信息,提示缺少什么包就安装什么包

3 最后输入以下才能成功安装

rpm -Uvh gcc-3.4.6-9.i386.rpmglibc-devel-2.3.2-95.20.i386.rpm libgcc-3.2.3-34.i386.rpm cpp-3.2.3-34.i386.rpmglibc-headers-2.3.2-95.20.i386.rpm glibc-kernheaders-2.4-8.34.i386.rpm

4.安装后输入命令gcc,则有如下返回

  gcc:no input files

  说明gcc安装成功

到此为止,gcc就装好了

没试过装源代码形式的就是不爽,所以按就一气呵成,再try一下装源代码格式的gcc编译器。我下载了3.4.1版本的gccgcc-3.4.1.tar.gz)。基本上按照下面这篇文章搞定的,虽然gnu网站上以及gcc解压后文件目录里面的INSTALL目录里面的介绍很全,但是仍觉得洋码不如咱中文看得舒服,哈哈,

2004420日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++FORTRANJAVAOBJCADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。

  安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它LinuxUnix系统。

 

 

  系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

  按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。

  1. 下载

  在GCC网站上(http://gcc.gnu.org/)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 4.1.0。可供下载的文件一般有两种形式:gcc-4.1.0.tar.gzgcc-4.1.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

  2. 解压缩

  根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

  % tar xzvf gcc-4.1.0.tar.gz

  或者

  % bzcat gcc-4.1.0.tar.bz2| tar xvf -

  新生成的gcc-4.1.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

  在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

  目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

  例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

  % mkdir gcc-build

  % cd gcc-build

  以下的操作主要是在目标目录 ${objdir} 下进行。

  4. 配置

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

  配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

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

  例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

  在我的机器上,我是这样配置的:

  % ../gcc-3.4.0/configure--prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking--enable--long-long --host=i386-redhat-linux --with-system-zlib--enable-languages=c,c++,java

  将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++JAVA语言,其它选项参见GCC提供的帮助说明。

Step 5:

此步是满足Step 4中的依赖关系。若Step4顺利,configure成功执行并生成Makefile,此步骤便可略过。但是在我编译的过程缺少gmpmpfrgcc4.5需要gmp,mpfr,mpc

4.5以前的版本需要gmp,mpfr

由于我编译过程中缺少gmpmpfr依赖,于是我便作了如下操作:

一、安装gmp(传统过程)

下载到gmp软件包,

 gmp-4.2.1.tar.bz2

然后执行:

$ tar xjvf ./ gmp-4.2.1.tar.bz2

$ cd ./ gmp-4.3.0

$ ./configure --prefix=/usr/local/gmp

$ make

$ make check

# make install

$ make distclean

二、安装mpfr(依然是传统过程)

依然下载到mpfr软件包pfr-2.4.0.tar.bz2,下载地址http://ftp.twaren.net/Unix/GNU/gnu/mpfr/

然后执行:

$ tar xjvf ./mpfr-2.4.0.tar.bz2

$ cd ./ mpfr-2.4.1

$ ./configure --prefix=/usr/local/mpfr--with-gmp=/usr/local/gmp

$ make

 

$ make check

# make install

$ make distclean

三、重新执行刚才没有成功的Step 4:

$ exportLD_RUN_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib

$ exportLD_LIBRARY_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib

$ LD_RUN_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/libLD_LIBRARY_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib

$ ../configure --prefix=/usr/gcc-4.4.0--enable-languages=all --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr--enable-libgomp

 

(若不想以后每次编译时都写这么一大堆,可以参考我前一篇日志《Linux启动过程中几个重要配置文件的执行过程》将这些环境变量写在配置文件中)

 

成功执行后,生成Makefile

Make的时候还出现错误

../../gcc-4.1.1/gcc/java/jcf-io.c -ojava/jcf-io.o

../../gcc-4.1.1/gcc/java/jcf-io.c:43:18:error: zlib.h: 没有这个文件或目录../../gcc-4.1.1/gcc/java/jcf-io.c:In function

  make后的结果是

 make[2]***[java/jcf-io.o] 错误1

 make[2]:leaving directory  /usr/local/src/u/gcc

 make[1]: *** [all-gcc] 错误2

 make[1]:leaving directory /usr/local/src/u

  make:***[all] 错误2

  发现时没有安装zlib-deve-1.2.1.2-1.2.i386.rpm, 这个包也是在RPMS目录下于是执行

    #rpm-ivh zlib-deve-1.2.1.2-1.2.i386.rpm

安装后在进行4Make

   make的过程中出现一个问题就解决一个问题。

Step 6:

编译完成后,我们只用安装了:

#make install

Step 7:

清理工作:

$rm -rf *

这 就是我编译gcc-4.1.0的全过程,途中遇到好几个问题,但解决的过程太杂,反正都是一阵google,步骤都体现在了Step 4Step 6中,为了使整个过程清晰,我便没有写出来了,因为过于specific无用。总之,遇到问题不用急,充分利用google和各大Linux论坛,问题总 会解决的。下面给一个链接,是我当时编译时,两个问题的答案都从此文得到:

 

Unix Linux Forumshttp://fixunix.com/solaris/490396-gcc-build-fails-cannot-compute-suffix-object-files.html

编译好了之后,那么我们系统中至少将会有两个版本的GCC:一个是我们现在编译好的,还有一个是刚才用到的以前版本的GCC,那么我们如何方便地从这几个版本进行切换呢?

一种粗劣的方法是手动用ln -s创建symbolic来管理,但这样费时费力,而且容易导致toolchain混乱。

幸好有update-alternatives实用软件!它可以方便管理好同一软件的各个不同版本。

1.一般情况下,编译程序路径都是使用

/usr/bin/gcc

其实这个/usr/bin/gcc只是个符号链接,它指向了/etc/alternatives/gcc,而/etc/alternatives/gcc是指向了/usr/bin/gcc-4.3,可以用ls命令查看

z@GODSON:~$ ls -l /usr/bin/gcc


lrwxrwxrwx 1 root root 21 2009-04-28 13:35/usr/bin/gcc -> /etc/alternatives/gcc

z@GODSON:~$ ls -l /etc/alternatives/gcc

lrwxrwxrwx 1 root root 16 2009-04-28 13:40/etc/alternatives/gcc -> /usr/bin/gcc-4.3

2.现在我们使用update-alternatives管理我们的GCC版本:

 

z@GODSON:~$ sudo update-alternatives--install /usr/bin/gcc gcc /usr/gcc-4.4.0/bin/gcc50

 

z@GODSON:~$ sudo update-alternatives --install/usr/bin/gcc gcc /usr/bin/gcc-4.3 40

z@GODSON:~$ sudo update-alternatives--install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30

 

这样,我们就已经把我们安装的三个GCC版本向update-alternatives注册了,接下来我们便可以方便地管理各版本切换。

3.切换版本

切换版本到gcc-4.1.0:

z@GODSON:~$ sudo update-alternatives --configgcc

[sudo] password for z:



在资源里搜搜   linux源代码下载



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值