Введение:
Binutils (сокращение от binary utilities) — это набор программных утилит, предназначенных для работы с объектными файлами, исполняемыми файлами и библиотеками. Эти инструменты являются важной частью процесса разработки и отладки программного обеспечения. Ниже приведено описание основных утилит из набора binutils и объяснение их необходимости.
Основные утилиты binutils
- as (Assembler) Ассемблер, который преобразует исходный ассемблерный код в объектный файл. Это один из первых этапов создания исполняемого файла.
- ld (Linker) Компоновщик, объединяющий несколько объектных файлов в один исполняемый файл или библиотеку. Он разрешает внешние ссылки между объектными файлами, обеспечивая корректное связывание модулей программы.
- objdump Инструмент для дизассемблирования и анализа содержимого бинарных файлов. Позволяет просмотреть ассемблерный код, таблицы символов и другую служебную информацию, что полезно для отладки и исследования программ.
- nm Утилита для отображения символов из объектных файлов. Помогает определить, какие функции и переменные определены или используются в конкретном объектном файле.
- ar Утилита для создания, модификации и извлечения файлов из архивов, обычно используемых для создания статических библиотек. С её помощью можно объединять несколько объектных файлов в единое целое.
- ranlib Программа для создания или обновления индекса в архивных библиотеках, что позволяет компоновщику быстрее находить нужные объекты в библиотеке.
Необходимость binutils
- Сборка программного обеспечения Binutils обеспечивают основные инструменты для превращения исходного кода в исполняемый файл. Ассемблер и компоновщик — ключевые компоненты в процессе сборки, позволяющие преобразовывать высокоуровневые языки и ассемблерный код в работоспособные программы.
- Отладка и анализ Инструменты, такие как objdump и nm, дают возможность разработчикам анализировать содержимое скомпилированных файлов, что важно для поиска ошибок, оптимизации кода и понимания внутреннего устройства программ. Это особенно полезно при отладке сложных программ или в случае необходимости проведения обратной инженерии.
- Поддержка кросс-компиляции Binutils поддерживают работу с различными архитектурами и форматами объектных файлов. Это позволяет разработчикам создавать программное обеспечение для разных платформ, что особенно актуально в условиях кросс-разработки.
- Создание и использование библиотек Инструменты ar и ranlib являются незаменимыми при работе со статическими библиотеками. Они позволяют объединять объектные файлы в библиотеки, что способствует модульности и повторному использованию кода.
- Оптимизация производительности Понимание структуры исполняемых файлов и символов, что позволяет утилиты вроде objdump и nm, помогает разработчикам оптимизировать программы, улучшая их производительность и уменьшая размер конечного продукта.
Установка:
В Astra Linux 1.7 используется: GNU ld (GNU Binutils for AstraLinux) 2.31.1
чтобы проверить текущие версии можно воспользоваться командами:
as --version
ld --version
objdump —version
Чтобы узнать версию всего пакета:
$ dpkg -s binutils | grep Version
Version: 2.31.1-16+ci202206301611+astra1
для систем с RPM (rpm -q binutils)
клонирует репозиторий
git clone https://gitflic.ru/project/litvinov_mv/astra-linux-binutils.git
cd astra-linux-binutils
sh build-binutils.sh
в процессе выполнения скрипта,
1) будет клонирован репозиторий с исходниками binutils
git clone git://sourceware.org/git/binutils-gdb.git binutils-${_ver}
внутри в папке bin будет уже лежать gdb
при сборке
../configure -v—prefix=${_install_dir} --with-python=/usr/bin/python3
важно указать параметр:
-with-python — чтобы отладчик работал в qtcreator
2) в папку ${HOME}/opt/binutils-2_40 будут собранны результаты, а также создан архив binutils-2_40-1.7.3.tar.gz (для переноса на другие машины)
Использование:
В корне скрипта лежит файл ./activate,
его надо выполнить перед сборкой приложения
$ source ./activate
$ echo ${PATH}
/home/astra/opt/gcc-10.1.0/bin:/home/astra/opt/gcc-10.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Проверить версии gcc:
$ gcc -v
Используются внутренние спецификации.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/astra/opt/gcc-10.1.0/libexec/gcc/x86_64-unknown-linux-gnu/10.1.0/lto-wrapper
Целевая архитектура: x86_64-unknown-linux-gnu
Параметры конфигурации: /var/tmp/astra/gcc-10.1.0_source/gcc-10.1.0/configure --prefix=/home/astra/opt/gcc-10.1.0 --enable-bootstrap --enable-shared --enable-threads=posix --enable-checkin
g=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-linker-build-id --enable-languages=c,c++,lto --disable-vtable-verify --with-default-libstdcxx-abi
=new --enable-libstdcxx-debug --without-included-gettext --enable-plugin --disable-initfini-array --disable-libgcj --enable-plugin --disable-multilib --with-tune=generic --build=x86_64-unk
nown-linux-gnu --target=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --with-pkgversion=astra-astra
Модель многопоточности: posix
Supported LTO compression algorithms: zlib
gcc версия 10.1.0 (astra-astra)