8.19. Binutils-2.42

Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами.

Приблизительное время сборки: 2.2 SBU
Требуемое дисковое пространство: 2.7 GB

8.19.1. Установка пакета Binutils

Документация Binutils рекомендует выполнять компиляцию в отдельном каталоге:

mkdir -v build
cd       build

Подготовьте Binutils к компиляции:

../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 \
             --enable-multilib

Значение параметров настройки:

--enable-gold

Собирает компоновщик gold и устанавливает его как ld.gold (вместе с компоновщиком по умолчанию).

--enable-ld=default

Собирает оригинальный компоновщик bfd и устанавливает его как ld (компоновщик по умолчанию) и как ld.bfd

--enable-plugins

Включает поддержку плагинов для компоновщика.

--with-system-zlib

Использовать установленную библиотеку zlib вместо сборки собственной.

--enable-multilib

Включает поддержку multilib в bintutils.

Скомпилируйте пакет:

make tooldir=/usr

Значение параметра make:

tooldir=/usr

Обычно для tooldir (каталога, в котором будут расположены исполняемые файлы) установлено значение $(exec_prefix)/$(target_alias). Например, машины x86_64 преобразуют это значение в /usr/x86_64-unknown-linux-gnu. Поскольку это пользовательская система, то целевой каталог в /usr не требуется. Параметр $(exec_prefix)/$(target_alias) использовался, если бы система применялась для кросс-компиляции (например, при компиляции пакета на компьютере Intel, который генерирует код, который может быть выполнен на компьютерах PowerPC).

[Важно]

Важно

Набор тестов для Binutils в этом разделе считается критически важным. Ни в коем случае не пропускайте его.

Выполните тестирование:

make -k check

Чтобы получить список неудачных тестов, запустите:

grep '^FAIL:' $(find -name '*.log')

Двенадцать тестов завершаются неудачно в наборе тестов gold, когда GCC собирается с параметрами --enable-default-pie и --enable-default-ssp.

Также известно, что завершаются неудачно три теста в пакете gprofng.

Установите пакет:

make tooldir=/usr install

Удалите бесполезные статические библиотеки:

rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,gprofng,opcodes,sframe}.a

8.19.2. Содержимое пакета Binutils

Установленные программы: addr2line, ar, as, c++filt, dwp, elfedit, gprof, gprofng, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings и strip
Установленные библиотеки: libbfd.so, libctf.so, libctf-nobfd.so, libgprofng.so, libopcodes.so и libsframe.so
Созданные каталоги: /usr/lib/ldscripts

Краткое описание

addr2line

Переводит адреса программ в имена файлов и номера строк; учитывая адрес и имя исполняемого файла, использует отладочную информацию в исполняемом файле, для определения файла исходного кода и номера строки, ассоциированной с адресом

ar

Создаёт, изменяет и распаковывает архивы

as

Ассемблер, который собирает результат работы gcc в объектные файлы

c++filt

Используется компоновщиком для исправления символов C++ и Java и предотвращения конфликтов перегруженных функций.

dwp

Утилита для упаковки DWARF

elfedit

Обновляет ELF заголовки в ELF файлах

gprof

Отображает в графическом виде информацию о профилировании

gprofng

Собирает и анализирует данные о производительности

ld

Компоновщик, который объединяет несколько объектных и архивных файлов в один файл, перемещая их данные и связывая символическими ссылками

ld.gold

Урезанная версия ld, которая поддерживает только формат объектных файлов elf

ld.bfd

Жесткая ссылка на ld

nm

Выводит список символов, используемых в данном объектном файле

objcopy

Преобразует один тип объектного файла в другой

objdump

Отображает информацию о данном объектном файле; можно указать параметры, определяющие, какая конкретно информация будет отображаться. Отображаемая информация полезна для программистов, которые работают над инструментами, используемыми при компиляции

ranlib

Создает индекс содержимого архива и сохраняет его в архиве; в индексе перечислены все символы, определенные в перемещаемых объектных файлах, содержащихся в архиве

readelf

Отображает информацию о двоичных файлах типа ELF

size

Отображает размеры секций и общий размер указанных объектных файлов

strings

Выводит для каждого указанного файла последовательности печатаемых символов, которые имеют по крайней мере указанную длину (по умолчанию четыре); для объектных файлов по умолчанию печатаются только строки из секций инициализации и загрузки, в то время как для других файлов он сканирует весь файл.

strip

Удаляет символы из объектных файлов

libbfd

Библиотека дескрипторов двоичных файлов

libctf

Библиотека отладки формата Compat ANSI-C Type

libctf-nobfd

Вариант libctf, не использующий функциональность libbfd.

libgprofng

Библиотека, содержащая большинство подпрограмм, используемых gprofng

libopcodes

Библиотека для работы с опкодами—«читаемыми» версиями инструкций для процессора. Используется для сборки таких утилит как objdump

libsframe

Библиотека для поддержки обратной онлайн-трассировки с использованием простого декодера разделов .sframe.