Binutils 安装指南(2.18 → 2.19.1) - 文章教程

Binutils 安装指南(2.18 → 2.19.1)

发布于 2021-01-15 字数 9258 浏览 1216 评论 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)”。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!

关于作者

JSmiles

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

2583 文章
29 评论
84935 人气
更多

推荐作者

清风夜微凉

文章 1 评论 0

为你鎻心

文章 2 评论 0

xxhui

文章 0 评论 0

1PKOH46yx8j0x

文章 0 评论 0

Arthur

文章 0 评论 0