Binutils 安装指南(2.18 → 2.19.1)
安装信息的来源
- 源码包内的下列文件:各级目录下的configure脚本 README {bfd,binutils,gas,gold,libiberty}/README
要点提示
如果想与 GCC 联合编译,那么可以将 binutils 包的内容解压到GCC的源码目录中(tar -xvf binutils-2.19.1.tar.bz2 --strip-components=1 -C gcc-4.3.3),然后按照正常编译GCC的方法编译即可。这样做的好处之一是可以完整的将 GCC 与 Binutils 进行一次bootstrap。
推荐用一个新建的目录来编译,而不是在源码目录中。编译完毕后可以使用"make check"运行测试套件。这个测试套件依赖于DejaGnu软件包,而DejaGnu又依赖于expect,expect依赖于tcl。
如果只想编译 ld 可以使用"make all-ld",如果只想编译 as 可以使用"make all-gas"。类似的还有 clean-ld clean-as distclean-ld distclean-as check-ld check-as 等。
配置选项
下列选项皆为非默认值[特别说明的除外]
- --help
--version
--quiet
--config-cache
--no-create
--srcdir=DIR
--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
--program-prefix=PREFIX
--program-suffix=SUFFIX
--program-transform-name=PROGRAM
--build=BUILD
--host=HOST
--target=TARGET - 这些选项的含义基本上通用于所有软件包,这里就不特别讲解了。
- --disable-nls
- 禁用本地语言支持(它允许按照非英语的本地语言显示警告和错误消息)。编译时出现"undefined reference to 'libintl_gettext'"错误则必须禁用。
- --disable-rpath
- 不在二进制文件中硬编码库文件的路径。
- --disable-multilib
- 禁止编译适用于多重目标体系的库。例如,在x86_64平台上,默认既可以生成64位代码,也可以生成32位代码,若使用此选项,那么将只能生成64位代码。
- --enable-cgen-maint=CGENDIR
- 编译cgen相关的文件[主要用于GDB调试]。
- --enable-shared[=PKG[,...]]
--disable-shared
--enable-static[=PKG[,...]]
--disable-static - 允许/禁止编译共享或静态版本的库和可执行程序,全部可识别的PKG如下:binutils,gas,gprof,ld,bfd,opcodes,libiberty(仅支持作为静态库)。static在所有目录下的默认值都是"yes";而shared在不同子目录下默认值不同,有些为"yes"(binutils,gas,gprof,ld)有些为"no"(bfd,opcodes,libiberty)。
- --enable-install-libbfd
--disable-install-libbfd - 允许或禁止安装 libbfd 以及相关的头文件( libbfd 是二进制文件描述库,用于读写目标文件".o",被GDB/ld/as等程序使用)。本地编译或指定--enable-shared的情况下默认值为"yes",否则默认值为"no"。
- --enable-64-bit-bfd
- 让BFD支持64位目标,如果希望在32位平台上编译64程序就需要使用这个选项。如果指定的目标(TARGET)是64位则此选项默认打开,否则默认关闭(即使 --enable-targets=all 也是如此)。
- --enable-elf-stt-common
- 允许BFD生成STT_COMMON类型的ELF符号。[2.19版本新增选项]
- --enable-checking
--disable-checking - 允许 as 执行运行时检查。正式发布版本默认禁用,快照版本默认启用。
- --disable-werror
- 禁止将所有编译器警告当作错误看待(因为当编译器为GCC时默认使用-Werror)。
- --enable-got=target|single|negative|multigot
- 指定GOT的处理模式。默认值是"target"。[2.19版本新增选项]
- --enable-gold
- 使用gold代替GNU ld。gold是Google开发的连接器,2008年捐赠给FSF,目的是取代现有的GNU ld,但目前两者还不能完兼容。[2.19版本新增选项]
- --enable-plugins
- 启用gold连接器的插件支持。[2.19版本新增选项]
- --enable-threads
- 编译多线程版本的gold连接器。[2.19版本新增选项]
- --with-lib-path=dir1:dir2...
- 指定编译出来的binutils工具(比如:ld)将来默认的库搜索路径,在绝大多数时候其默认值是"/lib:/usr/lib"。这个工作也可以通过设置 Makefile 中的 LIB_PATH 变量值完成。
- --with-libiconv-prefix[=DIR]
--without-libiconv-prefix - 在 DIR/include 目录中搜索 libiconv 头文件,在 DIR/lib 目录中搜索 libiconv 库文件。或者根本不使用 libiconv 库。
- --with-libintl-prefix[=DIR]
--without-libintl-prefix - 在 DIR/include 目录中搜索 libintl 头文件,在 DIR/lib 目录中搜索 libintl 库文件。或者根本不使用 libintl 库。
- --with-mmap
- 使用mmap访问BFD输入文件。某些平台上速度较快,某些平台上速度较慢,某些平台上无法正常工作。
- --with-pic
--without-pic - 试图仅使用 PIC 或 non-PIC 对象,默认两者都使用。
以下选项仅在与GCC联合编译时才有意义,其含义与GCC相应选项的含义完全一样,默认值也相同。
- --enable-bootstrap
--disable-bootstrap - --enable-languages=lang1,lang2,...
- --enable-stage1-checking
- --enable-stage1-languages
- --disable-libada
- --disable-libgcj
- --disable-libgomp
- --disable-libmudflap
- --disable-libssp
- --enable-objc-gc
- --disable-cloog-version-check
- --disable-ppl-version-check
- --with-gnu-as
--with-gnu-ld - --with-gmp=GMPDIR
--with-gmp-include=GMPINCDIR
--with-gmp-lib=GMPLIBDIR - --with-mpfr=MPFRDIR
--with-mpfr-include=MPFRINCDIR
--with-mpfr-lib=MPFRLIBDIR - --with-cloog=CLOOGDIR
--with-cloog_include=CLOOGINCDIR
--with-cloog_lib=CLOOGLIBDIR - --with-ppl=PPLDIR
--with-ppl_include=PPLINCDIR
--with-ppl_lib=PPLLIBDIR - --with-stabs
以下选项仅用于交叉编译环境
- --enable-serial-[{host,target,build}-]configure
- 强制为 host, target, build 顺序配置子包,如果使用"all"则表示所有子包。
- --with-sysroot=dir
- 将 dir 看作目标系统的根目录。目标系统的头文件、库文件、运行时对象都将被限定在其中。
- --with-target-subdir=SUBDIR
- 为 target 在 SUBDIR 子目录中进行配置。
- --with-newlib
- 将'newlib'(另一种标准C库,主要用于嵌入式环境)指定为目标系统的C库进行使用。
- --with-build-sysroot=sysroot
- 在编译时将'sysroot'当作指定 build 平台的根目录看待。仅在已经使用了--with-sysroot选项的时候,该选项才有意义。
- --with-build-subdir=SUBDIR
- 为 build 在 SUBDIR 子目录中进行配置。
- --with-build-libsubdir=DIR
- 指定 build 平台的库文件目录。默认值是SUBDIR。
- --with-build-time-tools=path
- 在给定的path中寻找用于编译Binutils自身的目标工具。该目录中必须包含 ar, as, ld, nm, ranlib, strip 程序,有时还需要包含 objdump 程序。例如,当编译Binutils的系统的文件布局和将来部署Binutils的目标系统不一致时就需要使用此选项。
- --with-cross-host=HOST
- 这个选项已经被反对使用,应该使用--with-sysroot来代替其功能。
以下选项意义不大,一般不用考虑它们
- --disable-dependency-tracking
- 禁止对Makefile规则的依赖性追踪。
- --disable-largefile
- 禁止支持大文件。[2.19版本新增选项]
- --disable-libtool-lock
- 禁止 libtool 锁定以加快编译速度(可能会导致并行编译的失败)
- --disable-build-warnings
- 禁止显示编译时的编译器警告,也就是使用"-w"编译器选项进行编译。
- --disable-fast-install
- 禁止为快速安装而进行优化。
- --enable-maintainer-mode
- 启用无用的 make 规则和依赖性(它们有时会导致混淆)
- --enable-commonbfdlib
--disable-commonbfdlib - 允许或禁止编译共享版本的 BFD/opcodes/libiberty 库。分析configure脚本后发现这个选项事实上没有任何实际效果。
- --enable-install-libiberty
- 安装 libiberty 的头文件(libiberty.h),许多程序都会用到这个库中的函数(getopt,strerror,strtol,strtoul)。这个选项经过实验,没有实际效果(相当于disable)。
- --enable-secureplt
- 使得binutils默认创建只读的 plt 项。相当于将来调用 gcc 时默认使用 -msecure-plt 选项。仅对 powerpc-linux 平台有意义。
- --enable-targets=TARGET,TARGET,TARGET...
- 使BFD在默认格式之外再支持多种其它平台的二进制文件格式,"all"表示所有已知平台。在32位系统上,即使使用"all"也只能支持所有32位目标,除非同时使用 --enable-64-bit-bfd 选项。由于目前 gas 并不能使用内置的默认平台之外的其它目标,因此这个选项没什么实际意义。此选项在所有目录下都没有默认值。但对于2.19版本,此选项在gold子目录下的默认值是"all"。
- --with-bugurl=URL
--without-bugurl - 指定发送bug报告的URL/禁止发送bug报告。默认值是"http://www.sourceware.org/bugzilla/"。
- --with-datarootdir=DATADIR
- 将 DATADIR 用作数据根目录,默认值是[PREFIX/share]
- --with-docdir=DOCDIR
--with-htmldir=HTMLDIR
--with-pdfdir=PDFDIR - 指定各种文档的安装目录。DOCDIR默认值的默认值是DATADIR,HTMLDIR和PDFDIR的默认值是DOCDIR。
- --with-included-gettext
- 使用软件包中自带的 GNU gettext 库。如果你已经使用了Glibc-2.0以上的版本,或者系统中已经安装了GNU gettext软件包,那么就没有必要使用这个选项。默认不使用。
- --with-pkgversion=PKG
- 在 bfd 库中使用"PKG"代替默认的"GNU Binutils"作为版本字符串。比如你可以在其中嵌入编译时间或第多少次编译之类的信息。
- --with-separate-debug-dir=DIR
- 在DIR中查找额外的全局debug信息,默认值:${libdir}/debug
- --with-debug-prefix-map='A=B C=D ...'
- 在调试信息中建立 A-B,C-D, ... 这样的映射关系。默认为空。[2.19版本新增选项]
环境变量
- tooldir
- 可执行文件的安装目录。其默认值是"$(exec_prefix)/$(target_alias)"。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论