Binutils 安装指南(2.18 → 2.19.1)

发布于 2021-01-15 13:17:39 字数 7410 浏览 2120 评论 0

安装信息的来源

  • 源码包内的下列文件:各级目录下的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文