mirror of
https://github.com/Poltern/lfs-ru.git
synced 2024-10-18 11:50:21 +03:00
77512d60a7
This option makes ld use DT_RUNPATH instead of DT_RPATH. DT_RPATH is generally considered bad because it takes precedence over LD_LIBRARY_PATH. For example, eog is linked with -rpath /usr/lib/eog, and with DT_RPATH if an old eog is already installed we are basically impossible to debug a new eog build w/o overwriting the system installation first or explicitly using "ld.so --inhibit-rpath" to invoke it. This "new" actually means "new in 2000," it's 24 years ago and all other distros has enabled it. Thus I guess some unexplainable "test suite uses installed library instead of the just built one" issues in BLFS are actually caused by this difference: the package author just assumes everyone is using DT_RUNPATH thus they just set LD_LIBRARY_PATH and consider it enough to test with the just built libraries, but DT_RPATH breaks this expectation. Let's eliminate the difference as it seems not doing anything good and doing so just takes one switch.
125 lines
4.7 KiB
XML
125 lines
4.7 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||
<!ENTITY % general-entities SYSTEM "../general.ent">
|
||
%general-entities;
|
||
]>
|
||
|
||
<sect1 id="ch-tools-binutils-pass2" role="wrap">
|
||
<?dbhtml filename="binutils-pass2.html"?>
|
||
|
||
<sect1info condition="script">
|
||
<productname>binutils-pass2</productname>
|
||
<productnumber>&binutils-version;</productnumber>
|
||
<address>&binutils-url;</address>
|
||
</sect1info>
|
||
|
||
<title>Binutils-&binutils-version; - Проход 2</title>
|
||
|
||
<indexterm zone="ch-tools-binutils-pass2">
|
||
<primary sortas="a-Binutils">Binutils</primary>
|
||
<secondary>tools, pass 2</secondary>
|
||
</indexterm>
|
||
|
||
<sect2 role="package">
|
||
<title/>
|
||
|
||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
|
||
href="../chapter08/binutils.xml"
|
||
xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
|
||
|
||
<segmentedlist>
|
||
<segtitle>&buildtime;</segtitle>
|
||
<segtitle>&diskspace;</segtitle>
|
||
|
||
<seglistitem>
|
||
<seg>&binutils-tmpp2-sbu;</seg>
|
||
<seg>&binutils-tmpp2-du;</seg>
|
||
</seglistitem>
|
||
</segmentedlist>
|
||
|
||
</sect2>
|
||
|
||
<sect2 role="installation">
|
||
<title>Установка пакета Binutils</title>
|
||
|
||
<!-- Don't remove this until Binutils upstream resolves this issue.
|
||
We can test by building Binutils on a complete system with
|
||
zlib (libz.so) installed, passing enable-shared and
|
||
without-system-zlib. If the resulted libctf.so still links against
|
||
libz.so (check with readelf -d) despite we are saying
|
||
without-system-zlib, then the issue is still unresolved. -->
|
||
<para>Система сборки Binutils использует содержащуюся в пакете копию libtool для линковки
|
||
с внутренними статическими библиотеками, но копии libiberty и zlib, поставляемые с пакетом,
|
||
не используют libtool. Это несоответствие может привести к тому, что созданные двоичные
|
||
файлы будут ошибочно связаны с библиотеками из основного дистрибутива. Решение этой
|
||
проблемы:</para>
|
||
|
||
<screen><userinput remap="pre">sed '6009s/$add_dir//' -i ltmain.sh</userinput></screen>
|
||
|
||
<para>Создайте отдельный каталог для сборки:</para>
|
||
|
||
<screen><userinput remap="pre">mkdir -v build
|
||
cd build</userinput></screen>
|
||
|
||
<para>Подготовьте Binutils к компиляции:</para>
|
||
|
||
<screen><userinput remap="configure">../configure \
|
||
--prefix=/usr \
|
||
--build=$(../config.guess) \
|
||
--host=$LFS_TGT \
|
||
--disable-nls \
|
||
--enable-shared \
|
||
--enable-gprofng=no \
|
||
--disable-werror \
|
||
--enable-64-bit-bfd \
|
||
--enable-new-dtags \
|
||
--enable-default-hash-style=gnu</userinput></screen>
|
||
|
||
<variablelist>
|
||
<title>Значение новых параметров настройки:</title>
|
||
|
||
<varlistentry>
|
||
<term><parameter>--enable-shared</parameter></term>
|
||
<listitem>
|
||
<para>Собирает <filename
|
||
class="libraryfile">libbfd</filename> как разделяемую библиотеку</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
|
||
<varlistentry>
|
||
<term><parameter>--enable-64-bit-bfd</parameter></term>
|
||
<listitem>
|
||
<para>Включает 64-разрядную поддержку (на хостах с меньшим размером слова).
|
||
В 64-разрядных системах это может и не понадобиться, но вреда от этого не будет</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
<para>Скомпилируйте пакет:</para>
|
||
|
||
<screen><userinput remap="make">make</userinput></screen>
|
||
|
||
<para>Установите пакет:</para>
|
||
|
||
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
|
||
|
||
<para>Удалите архивные файлы libtool, поскольку они потенциально опасны при
|
||
кросс-компиляции, также удалите ненужные статические библиотеки</para>
|
||
|
||
<screen><userinput remap="install">rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes,sframe}.{a,la}</userinput></screen>
|
||
|
||
</sect2>
|
||
|
||
<sect2 role="content">
|
||
<title/>
|
||
|
||
<para>Подробная информация об этом пакете находится в
|
||
<xref linkend="contents-binutils" role="."/></para>
|
||
|
||
</sect2>
|
||
|
||
</sect1>
|