%general-entities; ]> binutils &binutils-version;
&binutils-url;
Binutils-&binutils-version; - 第二遍 Binutils tools, pass 2 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../chapter06/binutils.xml" xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&binutils-ch5p2-sbu;</seg> <seg>&binutils-ch5p2-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>安装 Binutils 再一次地,创建一个单独的构建目录: mkdir -v build cd build 准备安装 Binutils: CC=$LFS_TGT-gcc \ AR=$LFS_TGT-ar \ RANLIB=$LFS_TGT-ranlib \ ../configure \ --prefix=/tools \ --disable-nls \ --disable-werror \ --with-lib-path=/tools/lib \ --with-sysroot 配置选项的含义: CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib 这次编译 Binutils 是本地编译而不是交叉编译, 设置这些变量可以强制构建系统使用交叉编译器和相关工具, 而不是宿主系统的编译器和工具。 --with-lib-path=/tools/lib 这个选项使得配置脚本在编译 Binutils 时指定库文件搜索目录, 将 /tools/lib 传递给链接器。这保证链接器不会搜索宿主系统的库文件目录。 --with-sysroot 在链接时,某些共享对象可能要求其他共享对象,sysroot 特性允许链接器查找它们。如果不启用它,在某些宿主环境中, 一些软件包无法成功构建。 译注 这个选项看上去很奇怪,而且解释不够清晰。 译者查资料得知, 从 Binutils 2.17 起,为保证和动态链接器的一致性, ld在搜索 DT_NEEDED 要求的共享对象时,先搜索 /etc/ld.so.conf 指定的目录, 再搜索配置时指定的默认目录。如果不启用 sysroot 功能, 且宿主系统使用了 /etc/ld.so.conf, 那么宿主环境中的共享对象会污染工具链, 进而导致一系列严重问题。 如果您不想使用这个看上去奇怪的选项,可以执行 touch /tools/etc/ld.so.conf 创建一个空的 ld.so.conf 文件, 覆盖宿主系统的设置。参阅 lfs-dev 列表中的讨论,以及 ld/2290。 另外 ld(1) 中关于这个搜索顺序的描述尚未更新。 编译该软件包: make 安装该软件包: make install 现在,为下一章的 重新调整 阶段准备链接器: make -C ld clean make -C ld LIB_PATH=/usr/lib:/lib cp -v ld/ld-new /tools/bin make 命令参数的含义: -C ld clean 该选项告诉 make 程序移除 ld 子目录中所有编译得到的文件。 -C ld LIB_PATH=/usr/lib:/lib 该选项重新构建 ld 子目录中的一切。在命令行指定 LIB_PATH Makefile 变量,即可覆盖临时工具的默认值, 并将其指向正确的最终路径。 该变量的值指定链接器的默认库文件搜索路径, 这个准备好的链接器将在下一章使用。 <para>该软件包的更多信息可以在 <xref linkend="contents-binutils"/> 中找到。</para> </sect2> </sect1>