lfs-ru/chapter08/binutils.xml

456 lines
19 KiB
XML
Raw Normal View History

<?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-system-binutils" role="wrap">
<?dbhtml filename="binutils.html"?>
<sect1info condition="script">
<productname>binutils</productname>
<productnumber>&binutils-version;</productnumber>
<address>&binutils-url;</address>
</sect1info>
<title>Binutils-&binutils-version;</title>
<indexterm zone="ch-system-binutils">
<primary sortas="a-Binutils">Binutils</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Пакет Binutils содержит компоновщик, ассемблер и другие инструменты
для работы с объектными файлами.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&binutils-fin-sbu;</seg>
<seg>&binutils-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка пакета Binutils</title>
<para>Убедитесь в правильной работе псевдотерминалов (PTY) в среде chroot,
запустив простой тест:</para>
<screen><userinput remap="test">expect -c "spawn ls"</userinput></screen>
<para>Эта команда должна вывести следующее:</para>
<screen><computeroutput>spawn ls</computeroutput></screen>
<para>Если вместо этого выходные данные содержат приведенное ниже сообщение,
значит, среда не настроена для правильной работы PTY. Эту проблему необходимо
решить перед запуском тестов для Binutils и GCC:</para>
<screen><computeroutput>The system has no more ptys.
Ask your system administrator to create more.</computeroutput></screen>
<para>Разработчики выпустили патч для устранения проблемы при использовании binutils
для сборки некоторых пакетов BLFS с включенной Link Time Optimization (LTO). Примените
его сейчас:</para>
<screen><userinput remap="pre">patch -Np1 -i ../&binutils-lto-patch;</userinput></screen>
<!--
<para>An error in the building system causes the shipped man pages to
be empty. Workaround the issue and remove the shipped man pages, so the
man pages will be regenerated correctly:</para>
<screen><userinput remap="pre">sed -i '63d' etc/texi2pod.pl
find -name \*.1 -delete</userinput></screen>
-->
<para>
Теперь внесите исправление, указанное в апстриме, которое влияет на сборку некоторых пакетов:
</para>
<screen><userinput remap="pre">sed -e '/R_386_TLS_LE /i \ || (TYPE) == R_386_TLS_IE \\' \
-i ./bfd/elfxx-x86.h</userinput></screen>
<para>Документация Binutils рекомендует выполнять компиляцию в
отдельном каталоге:</para>
<screen><userinput remap="pre">mkdir -v build
cd build</userinput></screen>
<para>Подготовьте Binutils к компиляции:</para>
<screen><userinput remap="configure">../configure --prefix=/usr \
--enable-gold \
--enable-ld=default \
--enable-plugins \
--enable-shared \
--disable-werror \
--enable-64-bit-bfd \
--with-system-zlib</userinput></screen>
<variablelist>
<title>Значение параметров настройки:</title>
<varlistentry>
<term><parameter>--enable-gold</parameter></term>
<listitem>
<para>Собирает компоновщик gold и устанавливает его как ld.gold (вместе с
компоновщиком по умолчанию).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-ld=default</parameter></term>
<listitem>
<para>Собирает оригинальный компоновщик bfd и устанавливает его как ld
(компоновщик по умолчанию) и как ld.bfd</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-plugins</parameter></term>
<listitem>
<para>Включает поддержку плагинов для компоновщика.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-64-bit-bfd</parameter></term>
<listitem>
<para>Включает 64-разрядную поддержку (на хостах с ограниченным размерам слов).
Может не понадобится в 64-разрядных системах, но вреда от этого не будет.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--with-system-zlib</parameter></term>
<listitem>
<para>Использовать установленную библиотеку zlib вместо сборки собственной.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make tooldir=/usr</userinput></screen>
<variablelist>
<title>Значение параметра make:</title>
<varlistentry>
<term><parameter>tooldir=/usr</parameter></term>
<listitem>
<para>Обычно для tooldir (каталога, в котором будут расположены исполняемые
файлы) установлено значение <filename
class="directory">$(exec_prefix)/$(target_alias)</filename>. Например, машины
x86_64 преобразуют это значение в
<filename class="directory">/usr/x86_64-unknown-linux-gnu</filename>. Поскольку
это пользовательская система, то целевой каталог в <filename
class="directory">/usr</filename> не требуется. <filename
class="directory">$(exec_prefix)/$(target_alias)</filename> будет использоваться,
если система используется для кросс-компиляции (например, при компиляции пакета
на компьютере Intel, который генерирует код, который может быть выполнен на компьютерах PowerPC).</para>
</listitem>
</varlistentry>
</variablelist>
<important>
<para>Набор тестов для Binutils в этом разделе считается критически важным. Ни в
коем случае не пропускайте его.</para>
</important>
<para>Выполните тестирование:</para>
<screen><userinput remap="test">make -k check</userinput></screen>
<!--
<para>Four tests related to zlib are known to fail.</para>
-->
<!--
<para>Seven gold tests are known to fail with gcc-11.1.0</para>
<para>Four ld tests named <quote>Run property ...</quote> are known to
fail.</para>
-->
<para>Установите пакет:</para>
<screen><userinput remap="install">make tooldir=/usr install</userinput></screen>
<para>Удалите ненужные статические библиотеки:</para>
<screen><userinput remap="install">rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.a</userinput></screen>
</sect2>
<sect2 id="contents-binutils" role="content">
<title>Содержимое пакета Binutils</title>
<segmentedlist>
<segtitle>Установленные программы</segtitle>
<segtitle>Установленные библиотеки</segtitle>
<segtitle>Установленный каталог</segtitle>
<seglistitem>
<seg>addr2line, ar, as, c++filt, dwp, elfedit, gprof, ld, ld.bfd, ld.gold, nm,
objcopy, objdump, ranlib, readelf, size, strings, и strip</seg>
<seg>libbfd.so, libctf.so, libctf-nobfd.so, и libopcodes.so</seg>
<seg>/usr/lib/ldscripts</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="addr2line">
<term><command>addr2line</command></term>
<listitem>
<para>Переводит адреса программ в имена файлов и номера строк; учитывая
адрес и имя исполняемого файла, использует отладочную информацию в
исполняемом файле, для определения файла исходного кода и номера строки,
ассоциированной с адресом</para>
<indexterm zone="ch-system-binutils addr2line">
<primary sortas="b-addr2line">addr2line</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ar">
<term><command>ar</command></term>
<listitem>
<para>Создаёт, изменяет и распаковывает архивы</para>
<indexterm zone="ch-system-binutils ar">
<primary sortas="b-ar">ar</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="as">
<term><command>as</command></term>
<listitem>
<para>Ассемблер, который собирает результат работы <command>gcc</command>
в объектные файлы</para>
<indexterm zone="ch-system-binutils as">
<primary sortas="b-as">as</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="c-filt">
<term><command>c++filt</command></term>
<listitem>
<para>Используется компоновщиком для исправления символов C++ и Java и
предотвращения конфликтов перегруженных функций.</para>
<indexterm zone="ch-system-binutils c-filt">
<primary sortas="b-c++filt">c++filt</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="dwp">
<term><command>dwp</command></term>
<listitem>
<para>Утилита для упаковки DWARF</para>
<indexterm zone="ch-system-binutils dwp">
<primary sortas="dwp">dwp</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="elfedit">
<term><command>elfedit</command></term>
<listitem>
<para>Обновляет ELF заголовок в ELF файлах</para>
<indexterm zone="ch-system-binutils elfedit">
<primary sortas="b-elfedit">elfedit</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="gprof">
<term><command>gprof</command></term>
<listitem>
<para>Отображает в графическом виде информацию о профилировании</para>
<indexterm zone="ch-system-binutils gprof">
<primary sortas="b-gprof">gprof</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ld">
<term><command>ld</command></term>
<listitem>
<para>Компоновщик, который объединяет несколько объектных и архивных файлов
в один файл, перемещая их данные и связывая символическими ссылками</para>
<indexterm zone="ch-system-binutils ld">
<primary sortas="b-ld">ld</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ld.gold">
<term><command>ld.gold</command></term>
<listitem>
<para>Урезанная версия ld, которая поддерживает только формат объектных файлов elf</para>
<indexterm zone="ch-system-binutils ld.gold">
<primary sortas="b-ld.gold">ld.gold</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ld.bfd">
<term><command>ld.bfd</command></term>
<listitem>
<para>Жесткая ссылка на <command>ld</command></para>
<indexterm zone="ch-system-binutils ld.bfd">
<primary sortas="b-ld.bfd">ld.bfd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nm">
<term><command>nm</command></term>
<listitem>
<para>Выводит список символов, используемых в данном объектном файле</para>
<indexterm zone="ch-system-binutils nm">
<primary sortas="b-nm">nm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="objcopy">
<term><command>objcopy</command></term>
<listitem>
<para>Преобразует один тип объектного файла в другой</para>
<indexterm zone="ch-system-binutils objcopy">
<primary sortas="b-objcopy">objcopy</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="objdump">
<term><command>objdump</command></term>
<listitem>
<para>Отображает информацию о данном объектном файле; можно указать
параметры, определяющие, какая конкретно информация будет отображаться.
Отображаемая информация полезна для программистов, которые работают над
инструментами, используемыми при компиляции </para>
<indexterm zone="ch-system-binutils objdump">
<primary sortas="b-objdump">objdump</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ranlib">
<term><command>ranlib</command></term>
<listitem>
<para>Создает индекс содержимого архива и сохраняет его в архиве; в индексе
перечислены все символы, определенные в перемещаемых объектных файлах, содержащихся в
архиве</para>
<indexterm zone="ch-system-binutils ranlib">
<primary sortas="b-ranlib">ranlib</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="readelf">
<term><command>readelf</command></term>
<listitem>
<para>тображает информацию о двоичных файлах типа ELF</para>
<indexterm zone="ch-system-binutils readelf">
<primary sortas="b-readelf">readelf</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="size">
<term><command>size</command></term>
<listitem>
<para>Отображает размеры секций и общий размер указанных объектных файлов</para>
<indexterm zone="ch-system-binutils size">
<primary sortas="b-size">size</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="strings">
<term><command>strings</command></term>
<listitem>
<para>Выводит для каждого указанного файла последовательности печатаемых
символов, которые имеют по крайней мере указанную длину (по умолчанию четыре);
для объектных файлов по умолчанию печатаются только строки из секций
инициализации и загрузки, в то время как для других файлов он сканирует весь файл.</para>
<indexterm zone="ch-system-binutils strings">
<primary sortas="b-strings">strings</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="strip">
<term><command>strip</command></term>
<listitem>
<para>Удаляет символы из объектных файлов</para>
<indexterm zone="ch-system-binutils strip">
<primary sortas="b-strip">strip</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libbfd">
<term><filename class="libraryfile">libbfd</filename></term>
<listitem>
<para>Библиотека дескрипторов двоичных файлов</para>
<indexterm zone="ch-system-binutils libbfd">
<primary sortas="c-libbfd">libbfd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libctf">
<term><filename class="libraryfile">libctf</filename></term>
<listitem>
<para>Библиотека отладки формата Compat ANSI-C Type</para>
<indexterm zone="ch-system-binutils libctf">
<primary sortas="c-libctf">libctf</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libctf-nobfd">
<term><filename class="libraryfile">libctf-nobfd</filename></term>
<listitem>
<para>Вариант libctf, не использующий функциональность libbfd.</para>
<indexterm zone="ch-system-binutils libctf-nobfd">
<primary sortas="c-libctf-nobfd">libctf-nobfd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libopcodes">
<term><filename class="libraryfile">libopcodes</filename></term>
<listitem>
<para>Библиотека для работы с опкодами&mdash;<quote>читаемыми</quote>
версиями инструкций для процессора.
Используется для сборки таких утилит как
<command>objdump</command></para>
<indexterm zone="ch-system-binutils libopcodes">
<primary sortas="c-libopcodes">libopcodes</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>