lfs-ru/chapter08/binutils.xml
Vladimir Pertsev 3ccf2b92b7 Clean chapter 8 binutils xml and text
Remove old commented instructions
Remove a sed and a test failure explanation: both have been fixed
in binutils-2.39
2022-08-15 23:17:51 +05:00

451 lines
19 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>
<!-- Fixed in binutils-2.39
<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 \
--sysconfdir=/etc \
--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>
<!-- Fixed in 2.39
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=01ae03b -->
<para>Известно, что один тест gold, <filename>pr17704a_test</filename>, не проходит,
если параметр <parameter>CONFIG_IA32_EMULATION</parameter> отключен в конфигурации
ядра хост-системы.</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="gprofng">
<term><command>gprofng</command></term>
<listitem>
<para>Собирает и анализирует данные о производительности</para>
<indexterm zone="ch-system-binutils gprofng">
<primary sortas="b-gprofng">gprofng</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>