Найти в Дзене
LITVINOV-UPGRADE-LINUX

Astra Linux - Как обновить binutils до версии 2.40?

Binutils (сокращение от binary utilities) — это набор программных утилит, предназначенных для работы с объектными файлами, исполняемыми файлами и библиотеками. Эти инструменты являются важной частью процесса разработки и отладки программного обеспечения. Ниже приведено описание основных утилит из набора binutils и объяснение их необходимости. В 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 будет уже л
Оглавление

Введение:

Binutils (сокращение от binary utilities) — это набор программных утилит, предназначенных для работы с объектными файлами, исполняемыми файлами и библиотеками. Эти инструменты являются важной частью процесса разработки и отладки программного обеспечения. Ниже приведено описание основных утилит из набора binutils и объяснение их необходимости.

Основные утилиты binutils

  • as (Assembler) Ассемблер, который преобразует исходный ассемблерный код в объектный файл. Это один из первых этапов создания исполняемого файла.
  • ld (Linker) Компоновщик, объединяющий несколько объектных файлов в один исполняемый файл или библиотеку. Он разрешает внешние ссылки между объектными файлами, обеспечивая корректное связывание модулей программы.
  • objdump Инструмент для дизассемблирования и анализа содержимого бинарных файлов. Позволяет просмотреть ассемблерный код, таблицы символов и другую служебную информацию, что полезно для отладки и исследования программ.
  • nm Утилита для отображения символов из объектных файлов. Помогает определить, какие функции и переменные определены или используются в конкретном объектном файле.
  • ar Утилита для создания, модификации и извлечения файлов из архивов, обычно используемых для создания статических библиотек. С её помощью можно объединять несколько объектных файлов в единое целое.
  • ranlib Программа для создания или обновления индекса в архивных библиотеках, что позволяет компоновщику быстрее находить нужные объекты в библиотеке.

Необходимость binutils

  1. Сборка программного обеспечения Binutils обеспечивают основные инструменты для превращения исходного кода в исполняемый файл. Ассемблер и компоновщик — ключевые компоненты в процессе сборки, позволяющие преобразовывать высокоуровневые языки и ассемблерный код в работоспособные программы.
  2. Отладка и анализ Инструменты, такие как objdump и nm, дают возможность разработчикам анализировать содержимое скомпилированных файлов, что важно для поиска ошибок, оптимизации кода и понимания внутреннего устройства программ. Это особенно полезно при отладке сложных программ или в случае необходимости проведения обратной инженерии.
  3. Поддержка кросс-компиляции Binutils поддерживают работу с различными архитектурами и форматами объектных файлов. Это позволяет разработчикам создавать программное обеспечение для разных платформ, что особенно актуально в условиях кросс-разработки.
  4. Создание и использование библиотек Инструменты ar и ranlib являются незаменимыми при работе со статическими библиотеками. Они позволяют объединять объектные файлы в библиотеки, что способствует модульности и повторному использованию кода.
  5. Оптимизация производительности Понимание структуры исполняемых файлов и символов, что позволяет утилиты вроде 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)

-2