binutils

900阅读 0评论2010-03-20 walker_wu
分类:LINUX

Binutils的内容
Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。
安装下列程序: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings 和 strip
安装下列库文件: libiberty.a, libbfd.[a,so] 和 libopcodes.[a,so]
简短说明
addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。
ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。
as 主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。
c++filt 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。
gprof 显示程序调用段的各种数据。
ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。
nm 列出目标文件中的符号。
objcopy把一种目标文件中的内容复制到另一种类型的目标文件中.
objdump 显示一个或者更多目标文件的信息。显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。
ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。
readelf 显示ebf格式可执行文件的信息。
size 列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。
strings 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可 打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。
strip 丢弃目标文件中的全部或者特定符号。
libiberty 包含许多GNU程序都会用到的函数,这些程序有: getopt, obstack, strerror, strtol 和 strtoul.
libbfd 二进制文件描述库.
libopcodes 用来处理opcodes的库, 在生成一些应用程序的时候也会用到它, 比如objdump.Opcodes是文本格式可读的处理器操作指令.
Binutils 安装依赖关系
Binutils 依赖于: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo
 
 

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

简而言之,你不需要明确指定该选项,完全可以忽略它的存在,因此也就不需要理解它的含意。

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[=posixaixdcegnatmachrtemsposix95solarisvxworkswin32nks]

启用线程支持,这是默认值。还可以进一步指定线程模型(不同平台支持的线程模型并不相同)。它对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=trapsbreaks

指定编译器如何处理除数为零的情况。此选项仅支持 MIPS 平台。

enable-__cxa_atexit

用 __cxa_atexit 代替 atexit 来登记 C++ 对象的本地静态和全局析构函数以符合标准对析构函数的处理规定,相当于在将来调用 gcc 时默认使用 -fuse-cxa-exit 选项。它还会影响到 C++ ABI ,因此生成的 C++ 共享库在其他的 Linux 发行版上也能使用。该选项仅在使用 Glibc 的情况下有效。

enable-target-optspace

指定目标库应当应当优化尺寸而不是速度。仅在 m32r 平台上是默认值。

disable-cpp

禁止安装 cpp[C预处理程序]。

with-cpp-install-dir=dirname

指定 cpp 程序的安装目录为 prefix/dirname

enable-initfini-array

为构造函数和析构函数强制使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 节。一般不需要指定该选项,因为 configure 会自动检测。

enable-maintainer-mode

要求从源代码重新生成 gcc.pot 文件。该文件是主消息分类,包括编译程序产生的所有错误和警告的诊断消息,普通用户不需要了解这些信息。仅在你改动过源代码的情况下才有可能需要使用这个选项。要使该选项正常工作,需要完整的源代码树个gettext的最新版本。

disable-bootstrap

enable-bootstrap

是否允许 bootstrap 。非交叉编译的情况下,enable是默认值;交叉编译的情况下,disable是默认值,但是你可以强制指定。

enable-version-specific-runtime-libs

将运行时库安装在编译器特定的子目录 (libdir/gcc)中。另外,‘libstdc++‘的包含文件将被安装在 libdir 中(除非指定了 with-gxx-include-dir)。如果你打算同时安装几个不同版本的 GCC ,这个选项就很有用处了。当前,‘libgfortran‘, ‘libjava‘, ‘libmudflap‘, ‘libstdc++‘, ‘libobjc‘都支持该选项。

enable-languages=lang1,lang2,...

指定只安装指定的语言支持,可以使用的语言是:ada, c, c++, fortran, java, objc, obj-c++, treelang,若不指定该选项则安默认装所有可用的语言支持。

disable-libada

不编译 GNAT 使用的运行时库和工具(Ada相关)。

disable-libssp

不编译保护缓冲区溢出的运行时库。

disable-libmudflap

不编译边界检查函数的运行时库。

disable-libgomp

不编译 GOMP 使用的运行时库和工具。

with-dwarf2

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

enable-targets=all

enable-targets=target_list

在一些混合型的目标平台上(比如 x86_64-linux)会创建混合型的编译器(既能够生成64位代码也能生成32位代码)。但是如果在此指定"x86-linux"将只能生成32位代码。通常当你希望在x86_64机器上默认生成32位代码的时候才使用该选项。

enable-secureplt

指定将来调用 gcc 时默认使用 -msecure-plt 选项,仅对 powerpc-linux 平台有效。

nfp

指定机器没有浮点运算单元,仅在 m68k-sun-sunosn 平台上有效。

disable-werror

禁止在编译时显示错误信息。

enable-checking=list

该选项会产生执行编译程序内部检查的代码。这种检查会产生诊断输出并会增加编译时间,并且仅在使用GCC作为编译器的时候才有效,但是对输出结果没有影响。对从CVS下载的版本默认值是"yes"(=assert,misc, tree,gc,rtlflag,runtime),对于正式发布的版本则是"release"(=assert,runtime)。可以从 "assert,fold,gc,misc,rtlflag,runtime,tree,gcac,rtl"中选择你想要检查的项目(逗号隔开的列表),需要注意的是最后两项检查非常耗时。使用 disable-checking 完全禁止这种检查会增加未能检测内部错误的风险。

enable-coverage[=optnoopt]

在编译器每次编译时收集自身的 coverage 信息。这个仅用于内部测试的目的,并且仅在使用GCC编译的时候才有效。参数控制着是否在编译编译器时使用优化(默认为"noopt")。在需要进行 coverage 分析的时候使用"noopt",在需要进行性能分析的时候使用"opt"。

enable-gather-detailed-mem-stats

收集详细的内存使用信息,将来在调用 gcc 时如果使用了 -fmem-report 选项就可以打印这些信息。

with-gc[=pagezone]

指定编译过程中使用的垃圾回收方案(默认为"page")。

disable-nls

禁用本地语言支持(它允许按照非英语的本地语言显示警告和错误消息)。

with-included-gettext

如果启用了NLS,该选项指出构建进程在使用系统安装的版本以前,优先使用自己的gettext副本。

with-catgets

如果启用了NLS,同时主机又没有安装settext(但有较低级的catgets接口),默认GCC的编译进程会使用其自带的gettext库。但是该选项将会强制编译进程使用主机的catgets。

with-libiconv-prefix=dir

在 dir/include 目录中搜索libiconv头文件,在 dir/lib 目录中搜索libiconv库文件。

enable-obsolete

允许为废弃的系统进行配置。被标记为"废弃的"系统将不会在下一个主要的版本中支持。

enable-decimal-float

disable-decimal-float

启用(或禁用)C十进制浮点扩展。在 PowerPC GNU/Linux 系统默认启用,在其他系统上默认禁用。

with-long-double-128

指定 long double 类型为 128-bit 。基于 Glibc 2.4 或以上版本编译时默认为 128-bit ,其他情况默认为 64-bit 。

with-gmp=pathname

with-mpfr=pathname

如果你没有将GMP(GNU Multiple Precision)库和MPFR库安装在标准位置,你可以使用这些选项指定他们的位置。

以下选项仅用于交叉编译环境

with-sysroot=dir

将 dir 看作目标系统的根目录。目标系统的头文件、库文件、运行时对象都将被限定在其中。

with-newlib

将‘newlib‘指定为目标系统的C库进行使用。这将导致 libgcc.a 中的 __eprintf 被忽略,因为它被假定为由‘newlib‘提供。

with-build-time-tools=dir

指定编译GCC自身时目标系统的工具链(汇编器,连接器,等等)目录。该目录中必须包含 ar, as, ld, nm, ranlib, strip 程序,有时还需要包含 objdump 程序。

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

简而言之,你不需要明确指定该选项,完全可以忽略它的存在,因此也就不需要理解它的含意。

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[=posixaixdcegnatmachrtemsposix95solarisvxworkswin32nks]

启用线程支持,这是默认值。还可以进一步指定线程模型(不同平台支持的线程模型并不相同)。它对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=trapsbreaks

指定编译器如何处理除数为零的情况。此选项仅支持 MIPS 平台。

enable-__cxa_atexit

用 __cxa_atexit 代替 atexit 来登记 C++ 对象的本地静态和全局析构函数以符合标准对析构函数的处理规定,相当于在将来调用 gcc 时默认使用 -fuse-cxa-exit 选项。它还会影响到 C++ ABI ,因此生成的 C++ 共享库在其他的 Linux 发行版上也能使用。该选项仅在使用 Glibc 的情况下有效。

enable-target-optspace

指定目标库应当应当优化尺寸而不是速度。仅在 m32r 平台上是默认值。

disable-cpp

禁止安装 cpp[C预处理程序]。

with-cpp-install-dir=dirname

指定 cpp 程序的安装目录为 prefix/dirname

enable-initfini-array

为构造函数和析构函数强制使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 节。一般不需要指定该选项,因为 configure 会自动检测。

enable-maintainer-mode

要求从源代码重新生成 gcc.pot 文件。该文件是主消息分类,包括编译程序产生的所有错误和警告的诊断消息,普通用户不需要了解这些信息。仅在你改动过源代码的情况下才有可能需要使用这个选项。要使该选项正常工作,需要完整的源代码树个gettext的最新版本。

disable-bootstrap

enable-bootstrap

是否允许 bootstrap 。非交叉编译的情况下,enable是默认值;交叉编译的情况下,disable是默认值,但是你可以强制指定。

enable-version-specific-runtime-libs

将运行时库安装在编译器特定的子目录 (libdir/gcc)中。另外,‘libstdc++‘的包含文件将被安装在 libdir 中(除非指定了 with-gxx-include-dir)。如果你打算同时安装几个不同版本的 GCC ,这个选项就很有用处了。当前,‘libgfortran‘, ‘libjava‘, ‘libmudflap‘, ‘libstdc++‘, ‘libobjc‘都支持该选项。

enable-languages=lang1,lang2,...

指定只安装指定的语言支持,可以使用的语言是:ada, c, c++, fortran, java, objc, obj-c++, treelang,若不指定该选项则安默认装所有可用的语言支持。

disable-libada

不编译 GNAT 使用的运行时库和工具(Ada相关)。

disable-libssp

不编译保护缓冲区溢出的运行时库。

disable-libmudflap

不编译边界检查函数的运行时库。

disable-libgomp

不编译 GOMP 使用的运行时库和工具。

with-dwarf2

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

enable-targets=all

enable-targets=target_list

在一些混合型的目标平台上(比如 x86_64-linux)会创建混合型的编译器(既能够生成64位代码也能生成32位代码)。但是如果在此指定"x86-linux"将只能生成32位代码。通常当你希望在x86_64机器上默认生成32位代码的时候才使用该选项。

enable-secureplt

指定将来调用 gcc 时默认使用 -msecure-plt 选项,仅对 powerpc-linux 平台有效。

nfp

指定机器没有浮点运算单元,仅在 m68k-sun-sunosn 平台上有效。

disable-werror

禁止在编译时显示错误信息。

enable-checking=list

该选项会产生执行编译程序内部检查的代码。这种检查会产生诊断输出并会增加编译时间,并且仅在使用GCC作为编译器的时候才有效,但是对输出结果没有影响。对从CVS下载的版本默认值是"yes"(=assert,misc, tree,gc,rtlflag,runtime),对于正式发布的版本则是"release"(=assert,runtime)。可以从 "assert,fold,gc,misc,rtlflag,runtime,tree,gcac,rtl"中选择你想要检查的项目(逗号隔开的列表),需要注意的是最后两项检查非常耗时。使用 disable-checking 完全禁止这种检查会增加未能检测内部错误的风险。

enable-coverage[=optnoopt]

在编译器每次编译时收集自身的 coverage 信息。这个仅用于内部测试的目的,并且仅在使用GCC编译的时候才有效。参数控制着是否在编译编译器时使用优化(默认为"noopt")。在需要进行 coverage 分析的时候使用"noopt",在需要进行性能分析的时候使用"opt"。

enable-gather-detailed-mem-stats

收集详细的内存使用信息,将来在调用 gcc 时如果使用了 -fmem-report 选项就可以打印这些信息。

with-gc[=pagezone]

指定编译过程中使用的垃圾回收方案(默认为"page")。

disable-nls

禁用本地语言支持(它允许按照非英语的本地语言显示警告和错误消息)。

with-included-gettext

如果启用了NLS,该选项指出构建进程在使用系统安装的版本以前,优先使用自己的gettext副本。

with-catgets

如果启用了NLS,同时主机又没有安装settext(但有较低级的catgets接口),默认GCC的编译进程会使用其自带的gettext库。但是该选项将会强制编译进程使用主机的catgets。

with-libiconv-prefix=dir

在 dir/include 目录中搜索libiconv头文件,在 dir/lib 目录中搜索libiconv库文件。

enable-obsolete

允许为废弃的系统进行配置。被标记为"废弃的"系统将不会在下一个主要的版本中支持。

enable-decimal-float

disable-decimal-float

启用(或禁用)C十进制浮点扩展。在 PowerPC GNU/Linux 系统默认启用,在其他系统上默认禁用。

with-long-double-128

指定 long double 类型为 128-bit 。基于 Glibc 2.4 或以上版本编译时默认为 128-bit ,其他情况默认为 64-bit 。

with-gmp=pathname

with-mpfr=pathname

如果你没有将GMP(GNU Multiple Precision)库和MPFR库安装在标准位置,你可以使用这些选项指定他们的位置。

以下选项仅用于交叉编译环境

with-sysroot=dir

将 dir 看作目标系统的根目录。目标系统的头文件、库文件、运行时对象都将被限定在其中。

with-newlib

将‘newlib‘指定为目标系统的C库进行使用。这将导致 libgcc.a 中的 __eprintf 被忽略,因为它被假定为由‘newlib‘提供。

with-build-time-tools=dir

指定编译GCC自身时目标系统的工具链(汇编器,连接器,等等)目录。该目录中必须包含 ar, as, ld, nm, ranlib, strip 程序,有时还需要包含 objdump 程序。

上一篇:数组和指针可交换性的总结
下一篇:mount详解 (转载)