Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479197
  • 博文数量: 130
  • 博客积分: 2111
  • 博客等级: 大尉
  • 技术积分: 1373
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-28 09:55
个人简介

IT民工

文章分类

全部博文(130)

文章存档

2021年(1)

2019年(1)

2017年(3)

2014年(1)

2013年(3)

2012年(2)

2011年(3)

2010年(2)

2009年(114)

分类: LINUX

2009-09-07 12:44:22

gcc 安装配置(转)
2007-12-29 11:25:50

GCC-3.4.4安装配置指南 - 打造你自己的Gcc

 

出处:   作者:金步国

 

哈哈名字噱头了一些,其实主要就是详细的向你讲解一下GCC安装时配置选项[以gcc-3.4.4为例]
先说说安装过程,其实是废话,LFS-Book上都讲过好几遍了,不过为了完整,还是简单的说一下吧。
===========================================
安装过程
------------------
前提1(第一段废话):
确保目前的C编译程序可用,路径中包含cc或gcc,而且CC环境变量也要设置为编译程序的名字。
检查方法:直接在命令行输入"cc"或"gcc"就可以了。

前提2(第二段废话):
确保已经安装了GNU make。其他版本的make也许可以工作,但是更有可能会带来意想不到的问题。
检查方法:输入命令"make -v"查看版本信息。

前提3(第三段废话):
创建一个与源代码目录无关的另一个编译目录,用来包含所有make程序的描述文件以及产生的目标文件。
强烈建议不要在gcc的源代码目录中编译!!

(第四段废话)
下载源代码、解包、但是不要进入解包后的目录[用LFS的没人不知道,略过不表]

进入上述所说的不同于存放源代码目录的编译目录,
然后使用绝对路径运行位于源代码目录中的configure脚本进行编译前的配置,这是本文的重头戏,详细的选项放在后面讲
该脚本最有趣的是它在绝大多数情况下都能够正确猜测到当前系统的软硬件环境,很少出错。
这个能力是通过config.guess脚本来实现的。你可以通过命令行直接执行这个命令,以查看它的猜测结果。

运行configure完毕
然后就是"make && make install"[如要运行测试程序,请参考LFS-Book,这里略过不表]

[唐僧一句]
接下来检查一下PATH环境变量是否正确包含了gcc,否则如果你觉得需要的话,请添上它。

==================================================
下面讲讲configure脚本的选项
[只选一些有用的讲讲,实在无聊的选项就略过不讲了]
-----------------------------
先讲讲基础知识

安装选项是通过configure脚本的命令行选项指定的[废话],该脚本产生的文件可以控制编译和安装的方方面面[还是废话]。
每个选项都有它自己的默认值[TMD,又是废话],但是你可以通过选项修改这些默认值,使它符合你的需要[再说废话打你出去! 好好好...我进入正题...]。

enable和disable
选项的名字能够以--enable打头的也同样能够以--disable打头,二者之中必有一个是默认的(依赖平台的不同而不同),
下面仅列出以--enable打头的,--disable打头的就略过不提了(他们还是存在的)。

with和without
选项的名字能够以--with打头的也同样能够以--without打头,二者之中必有一个是默认的(依赖平台的不同而不同),
下面仅列出以--with打头的,--without打头的就略过不提了(他们还是存在的)。

汇编器和连接器
选项的集合可用于确定汇编器和连接器的名称和位置。但是如果没有使用这些选项的话,将会使用下面两个步骤进行定位:
1,查找/lib/gcc-lib//目录
2,跟操作系统相关的目录,如linux中的/usr/bin

-------------------------
接着具体讲讲选项

--prefix= 地球人都知道这个是GCC的安装根目录。默认为/usr/local

--host= 平台名。默认为config.guess的结果。

--build= 产生在指定主机上运行的配置。默认和--host选项的值相同。

--target= 指定目标机器(运行编译程序的机器),默认为config.guess的结果。

--cache-file= configure脚本会运行各种测试来确定本地机器的配置和性能,这里指定的文件将包含这些测试的结果。

--enable-cpp 安装cpp[C预处理程序],这是默认值。

--enable-checking[=misc,tree,gc,rtl,gcac] 该选项会产生执行编译程序内部检查的代码。这种检查会产生诊断输出并会增加编译时间,但是对输出结果没有影响。
对从CVS下载来编译的这是默认选项,但是正式发布的版本不是。可以从上述5个中选择你想要检查的项目(逗号隔开的列表),若省略列表则仅检查前3项(后两项超慢)。

--enable-languages=lang0,[lang1,lang2 ...] 指定只安装指定的语言支持,可以使用的语言是:ada, c, c++, f77, f95, java, objc
若不指定该选项则安默认装所有可用的语言支持。

--enable-libgcj 创建java运行时库,这是默认值。若你使用其他的运行时库,可以禁用它。

--enable-maintainer-mode 要求从源代码重新生成gcc.pot文件。该文件是主消息分类,包括编译程序产生的所有错误和警告的诊断消息。该文件用来实现国际化。
[注意]要使该选项正常工作,需要完整的源代码树个gettext的最新版本。

--enable-multilib 构建目标系统上的多个库,在大多数系统上该选项是默认值。可以通过--disable-xxxx禁止生成某些特定的库。[如果你是x86体系,就别关心这个选项了]

--enable-nls 指定本地语言支持是编译程序的一部分(非默认),它允许按照非英语的本地语言显示警告和错误消息。

--enable-shared 创建共享库,这是默认值。--disable-shared将只创建静态库。

--enable-target-optspace 要求在尺寸上对库进行优化,而不是在速度上。(非默认)

--enable-threads 启用线程支持,在某些平台上是默认值。它对Obj-C的库以及C++,Java的异常处理有影响。可以用--disable-threads禁用线程支持[大概没人这么干]。

--enable-threads= 进一步明确指定支持线程的库的名字。可用的库名为:aix,dce,no[禁用线程],posix,rtems,solaris,vxworks,win32[微软]

--help 显示选项列表和相应的解释。

--no-create 运行configure配置脚本,但是并不创建编译代码所需要的输出文件,可用于测试。

--norecursion 指示源代码树的每个目录都包含独立的configure脚本。除非明确指定该选项,否则运行一个目录中的configure脚本也会运行其子目录中的所有configure脚本。

--silent 禁止打印configure脚本的输出信息。这些信息通常显示在屏幕上,一般是各种测试信息。

--srcdir= 指定包含configure.in文件的目录。该文件提供configure使用的关于源文件名字和位置的信息。

--tmpdir= 指定用来保存临时工作文件的目录。

--version 显示创建configure脚本的Auotoconfig工具的版本号。

--with-as= 指定汇编器的绝对路径名。如果configure的默认查找过程找不到汇编器,就会需要该选项。或者系统中有多个汇编器,也需要它来指定使用哪一个。
[注意]如果使用GNU的汇编器,那么你就必须同时使用GNU连接器。
--with-ld= 指定连接器的绝对路径名。如果configure的默认查找过程找不到连接器,就会需要该选项。或者系统中有多个连接器,也需要它来指定使用哪一个。

--with-catgets 如果通过--enable-nls启用了NLS,但是主机没有安装settext,编译程序就需要使用主机的catgets。

--with-included-gettext 如果通过--enable-nls启用了NLS,该选项指出构建进程在使用系统安装的版本以前,要尝试使用自己的gettext备份。

--with-cpu= 指出目标平台的CPU。如果为平台选择一种特定的CPU,GCC就能生成针对特定CPU的更优化的代码。具体可以使用哪些cpu请查看config.gcc

--with-dwarf2 指定编译程序产生的调试信息,默认为DWARF2格式。

--with-headers= 指出创建包含交叉编译程序的目标的头文件。若//sys-include不存在,则必须用该选项指定。
头文件必须复制到GCC的安装目录并被修改才能保持兼容。
--with-libs= 该选项适用于创建交叉编译程序。指定目录列表中的库会被复制到GCC的安装目录中。
--with-newlib 该选项用于构建交叉编译程序。库newlib用于目标机器的C库。

--with-local-prefix= 编译程序用来查找安装在本地的包含文件目录的前缀,默认为/usr/local。
只有在系统已经建立了某些特定的目录规则,而不再是在/usr/local/include中查找本地安装的头文件的时候,该选项才使必须的。
该选项不能设置为/usr,因为安装的头文件会和系统的头文件混合,从而造成冲突,导致不能编译某些程序。
--prefix选项对该选项没有影响,--prefix仅仅指定GCC的安装目录,而该选项指定在运行时到哪里查找头文件。

--with-slibdir= 包含共享库的目录名,默认是/lib

--with-stabs 指定编译程序产生的调试信息为stabs格式,而不是宿主系统的默认格式。通常GCC产生的默认调试信息是ECOFF格式,但是它包含的调试信息没有stabs多。

--with-system-zlib 指示编译程序使用系统上已有的zlib,而不是创建一个新的。仅用于java。

--with-x 指示要使用X Window System 。不想用的话就without
--x-includes= 指定包含X包含文件的目录。
--x-libraries= 指定包含X库的目录名。
阅读(1980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~