Binutils与GCC配置选项简介_LinuxEden-Linux伊甸园
  
版权声明
本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。

其他作品
本文作者十分愿意与他人共享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有作品的列表:


BUG报告,切磋与探讨
由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别。如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系。联系方式:Email: ; QQ: 70171448 ; MSN:

==============================================


此文是我在写作《DIY一个实用的 Mini-LAPP 服务器》过程中整理的资料,由于LFS的关键之一在于工具链的制作,而GCC与binutils是工具链的核心(还有一个Glibc),因此特地把这部分内容抽取出来单独成文,以供 LFS 玩家参考。

Binutils 配置选项简介(适用于2.17)

要查看完整的配置选项,除了源码树根目录下运行"configure --help"查看外,还需要查看原码树的每个子目录下的 README 文件,以及在每个子目录中运行"configure --help"查看[真麻烦!]。
下列选项皆为非默认值[特别说明的除外]
[提示]如果只想编译 ld 可以使用"make all-ld",如果只想编译 as 可以使用"make all-gas"。

--cache-file=FILE
--help
--no-create
--quiet, --silent
--version
--prefix=PREFIX
--exec-prefix=EPREFIX
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--datadir=DIR
--sysconfdir=DIR
--sharedstatedir=DIR
--localstatedir=DIR
--libdir=DIR
--includedir=DIR
--oldincludedir=DIR
--infodir=DIR
--mandir=DIR
--srcdir=DIR
--program-prefix=PREFIX
--program-suffix=SUFFIX
--program-transform-name=PROGRAM
--build=BUILD
--host=HOST
--target=TARGET
这些选项的含义基本上通用于所有软件包,这里就不特别讲解了。
--enable-64-bit-bfd
支持64位目标。如果指定的目标是64位则此选项默认打开,否则默认关闭(即使 --enable-targets=all 也是如此)。要开启此选项,编译器必须支持64位整数(比如 gcc)。
--enable-bfd-assembler
简而言之,你不需要明确指定该选项,xx可以忽略它的存在,因此也就不需要理解它的含意。
--enable-install-libbfd
允许安装 libbfd 以及相关的头文件(二进制文件描述库,用于读写目标文件".o",被GDB/ld/as等程序使用)。
--enable-commonbfdlib
编译共享版本的 BFD/opcodes/libiberty 库。
--enable-install-libiberty
安装libiberty的头文件(libiberty.h),许多程序都会用到这个库中的函数(getopt,strerror,strtol,strtoul)。
--enable-shared[=PKGS]
将指定的PKGS(逗号分隔的列表)编译为共享库,目前仅可使用:bfd,opcodes 。此选项在不同子目录下默认值不同,有些为"yes"有些为"no"。
--enable-static[=PKGS]
将指定的PKGS(逗号分隔的列表)编译为静态库,目前仅可使用:bfd,opcodes 。所有子目录下默认值皆为"yes"。
--enable-targets=TARGET,TARGET,TARGET...
使其BFD在默认格式之外再支持多种其它平台的二进制文件格式,"all"表示所有已知平台。在32位系统上,即使使用"all"也只能支持所有32位目标,除非同时使用 --enable-64-bit-bfd 选项。由于目前 gas 并不能使用内置的默认平台之外的其它目标,因此这个选项没什么实际意义。
--enable-serial-[{host,target,build}-]configure
强制为 host, target, build 顺序配置子包,如果使用"all"则表示所有子包。
--with-build-subdir=SUBDIR
为 build 在 SUBDIR 子目录中进行配置(用于交叉编译)
--with-target-subdir=SUBDIR
为 target 在 SUBDIR 子目录中进行配置(用于交叉编译)
--with-cross-host=HOST
用于配置交叉编译器
--with-build-sysroot=sysroot
在编译时将'sysroot'当作系统根目录看待
--with-build-time-tools=path
在编译过程中使用给定的 path 寻找 target tools
--with-newlib
Configuring with newlib
--with-lib-path=dir1:dir2...
指定不同于默认目录的库搜索路径,这个工作也可以通过设置 Makefile 中的 LIB_PATH 变量值或使用这个选项完成。如果你想要做一个交叉连接器,那么可能需要用 -l 指定不同于默认目录的库搜索路径。
--enable-build-warnings
允许显示编译时的编译器警告
--enable-werror
使用 -Werror 来将所有编译器警告当作错误来看待。
--enable-dependency-tracking
启用常规的依赖性追踪(指的是Makefile规则),允许多次编译。默认禁止依赖性追踪,这样可以加速一次性编译。
--enable-maintainer-mode
启用无用的 make 规则和依赖性(它们有时会导致混淆)
--disable-fast-install
禁止为快速安装而进行优化。
--enable-bootstrap
本地编译时默认打开,交叉编译时默认关闭。建议不要明确指定,否则可能会出现配置错误。
--enable-cgen-maint=dir
编译 cgen 相关的文件[主要用于GDB调试]。
--enable-libada
编译 libada 目录
--enable-libgcc-math
编译 libgcc-math 目录
--enable-libssp
编译 libssp 目录
--disable-libtool-lock
禁止 libtool 锁定以加快编译速度(可能会导致并行编译的失败)
--disable-nls
禁用本地语言支持(默认为启用)。编译时出现"undefined reference to 'libintl_gettext'"错误则必须禁用。
--enable-secureplt
默认创建只读的 plt 项[建议不要明确设置]。
--with-mmap
使用 mmap 访问文件,某些平台上速度较快,某些平台上速度较慢,某些平台上无法正常工作。建议不要明确指定。
--with-datarootdir
将 datarootdir 用作数据根目录
--with-gnu-ld
明确告诉编译器使用的连接器是 GNU ld ,默认为未指定。
--with-docdir
将文档安装在该目录中
--with-htmldir
将html文档安装在该目录中
--with-included-gettext
使用软件包中自带的 GNU gettext 库
--with-gmp=PATH
指定 GMP 库的安装目录
--with-gmp-dir=PATH
指定 GMP 库的源代码目录
--with-mpfr=PATH
指定 MPFR 库的安装目录
--with-mpfr-dir=PATH
指定 MPFR 库的源代码目录
--x-includes=DIR
指定 X 的包含文件所在目录
--x-libraries=DIR
指定 X 的库文件所在目录
--with-pic
--without-pic
试图仅使用 PIC 或 non-PIC 对象,默认两者都使用[建议不要明确指定]。

GCC 配置选项简介(适用于4.0/4.1/4.2)

此部分是基于官方的GCC安装指南的简要描述,如果你想了解更详细的信息请参考官方文档。

推荐用一个新建的目录来编译GCC,而不是在源码目录中,这一点玩过LFS的兄弟都很熟悉了。另外,如果先前在编译中出现了错误,推荐使用 make distclean 命令进行清理,然后重新运行 configure 脚本进行配置,再进行编译。

下面将简要介绍所有可用的配置选项。需要注意的是,不能使用"configure --help"查看GCC的配置选项,只能通过页面查看。

每一个 --enable 选项都有一个对应的 --disable 选项,同样,每一个 --with 选项也都用一个对应的 --without 选项。每一对选项中必有一个是默认值(依赖平台的不同而不同)。下面所列选项若未特别说明皆为非默认值。

--prefix
--exec-prefix
--bindir
--libdir
--libexecdir
--infodir
--datadir
--mandir
--program-prefix
--program-suffix
--program-transform-name
--host
--build
--target
--srcdir
--cache-file
--no-create
--silent
--version
这些选项的含义基本上通用于所有软件包,这里就不特别讲解了。
--tmpdir=dir
指定用来保存临时工作文件的目录。
--with-slibdir=dir
共享库 libgcc 的安装目录,默认等于 --libdir 的值。
--with-gxx-include-dir=dir
G++头文件的安装目录,默认为 prefix/include/c++/版本 。
--with-local-prefix=dir
编译程序用来查找安装在本地的包含文件目录的前缀,默认为 /usr/local 。只有在系统已经建立了某些特定的目录规则,而不再是在 /usr/local/include 中查找本地安装的头文件的时候,该选项才使必须的。不能指定为 /usr ,也不能指定为包含系统标准头文件的目录,因为安装的头文件会和系统的头文件混合,从而造成冲突,导致不能编译某些程序。
--enable-shared[=package[,...]]
在支持共享库的平台上编译共享版本的库,这是默认值。如果指定了库名称的列表则列表之外的库将编译为静态版本。当前可用的库名称有:'libgcc', 'libstdc++', 'libffi', 'zlib', 'boehm-gc', 'ada', 'libada', 'libjava', 'libobjc'。另外,'libiberty'不支持作为共享库。可以用 --disable-shared 指定仅仅编译静态库。
--with-gnu-as
--with-gnu-ld
指定编译器使用的汇编器为GNU汇编器/连接器,如何你实际使用的不是GNU汇编器/连接器,指定这个选项会引起混淆;另一方面如果你实际使用的是GNU汇编器/连接器,但是却没有指定这个选项,也有可能会造成混淆。
--with-as=pathname
--with-ld=pathname
指定编译器使用的汇编器/连接器的位置。如果configure的默认查找过程找不到汇编器/连接器,就会需要该选项。或者系统中有多个汇编器/连接器,也需要它来指定使用哪一个。如果使用GNU的汇编器,那么你就必须同时使用GNU连接器。
--with-stabs
指定编译程序产生的调试信息为stabs格式,而不是宿主系统的默认格式。通常GCC产生的默认调试信息是ECOFF格式,但是它包含的调试信息没有stabs多。
--disable-multilib
禁止编译适用于多重目标体系的库。
--enable-threads[=posix|aix|dce|gnat|mach|rtems|posix95|solaris|vxworks|win32|nks]
启用线程支持,这是默认值。还可以进一步指定线程模型(不同平台支持的线程模型并不相同)。它对Obj-C的编译器和库以及C++,Java的异常处理有影响。
--enable-tls
指定目标系统支持TLS(线程本地存储),一般情况下不需要明确指定这个选项,因为 configure 脚本可以自动检测。仅在你认为检测不正确的情况下才使用这个选项明确指定。
--with-cpu=cpu
指定将来调用 gcc 时 -mcpu 选项的默认值。
--with-schedule=cpu
指定将来调用 gcc 时 -mschedule 选项的默认值。
--with-arch=cpu
指定将来调用 gcc 时 -march 选项的默认值。
--with-tune=cpu
指定将来调用 gcc 时 -mtune 选项的默认值。
--with-abi=abi
指定将来调用 gcc 时 -mabi 选项的默认值。
--with-fpu=type
指定将来调用 gcc 时 -mfpu 选项的默认值。
--with-float=type
指定将来调用 gcc 时 -mhard-float 或 -msoft-float 选项的默认值。
--with-mode=mode
指定将来调用 gcc 时 -marm 或 -mthumb 选项的默认值。此选项仅支持 ARM 平台。
--with-divide=traps|breaks
指定编译器如何处理除数为零的情况。此选项仅支持 MIPS 平台。
--enable-__cxa_atexit
发表评论
评价:
表情:

登陆后评论,有机会获得精彩评论大奖.


郑重声明:资讯 【Binutils与GCC配置选项简介_LinuxEden-Linux伊甸园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——