lfs-ru/chapter08/binutils.xml

449 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>Документация 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 \
--enable-default-hash-style=gnu</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>--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>Чтобы получить список неудачных тестов, запустите:</para>
<screen><userinput remap="test">grep '^FAIL:' $(find -name '*.log')</userinput></screen>
<para>Двенадцать тестов завершаются неудачно в наборе тестов gold, когда GCC
собирается с параметрами
<option>--enable-default-pie</option> и
<option>--enable-default-ssp</option>.</para>
<!-- <para>Также известно, что завершаются неудачно три теста в пакете gprofng.</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,gprofng,opcodes,sframe}.a</userinput></screen>
</sect2>
<sect2 id="contents-binutils" role="content">
<title>Содержимое пакета Binutils</title>
<segmentedlist>
<segtitle>Установленные программы</segtitle>
<segtitle>Установленные библиотеки</segtitle>
2023-05-24 09:00:49 +03:00
<segtitle>Созданные каталоги</segtitle>
<seglistitem>
<seg>addr2line, ar, as, c++filt, dwp, elfedit, gprof, gprofng, ld, ld.bfd, ld.gold, nm,
2023-08-03 23:54:52 +03:00
objcopy, objdump, ranlib, readelf, size, strings и strip</seg>
<seg>libbfd.so, libctf.so, libctf-nobfd.so, libgprofng.so,
libopcodes.so и libsframe.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="libgprofng">
<term><filename class="libraryfile">libgprofng</filename></term>
<listitem>
<para>Библиотека, содержащая большинство подпрограмм, используемых
<command>gprofng</command></para>
<indexterm zone="ch-system-binutils libgprofng">
<primary sortas="c-libgprofng">libgprofng</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>
<varlistentry id="libsframe">
<term><filename class="libraryfile">libsframe</filename></term>
<listitem>
<para>Библиотека для поддержки обратной онлайн-трассировки с использованием
простого декодера разделов .sframe.</para>
<indexterm zone="ch-system-binutils libsframe">
<primary sortas="c-libsframe">libsframe</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>