Возможно ли собрать актуальную версию g++ (14/13) на Raspberry Pi, работающем под управлением Debian 12 arm64?

Вопрос или проблема

Я в недоумении. Похоже, что для Raspberry Pi нет более новой версии образа Debian, чем текущая стабильная версия 12 (bookworm). Я загрузил и установил её сразу же после выхода без каких-либо проблем, помню. Ссылка на все протестированные образы здесь. Аппаратное обеспечение моего Pi — 4 (8 ГБ). Просто чтобы прояснить, я полностью согласен с целью Debian быть стабильным как скала. Просто одна вещь, если можно.S


Мне интересно, возможно ли собрать актуальную версию g++ (14) на моем arm64 Raspberry Pi с Debian 12? (Сегодня мне это было нужно, но я выяснил, что доступна только старая версия g++-12, она причинила мне лишь небольшие неудобства на этот раз.)

И если да, как именно мне поступить? У меня нет идеи.


Вот какие версии g++ я нашел доступными на Linux Mint 22 (основанном на Ubuntu Noble), т.е. версии 10+:

$ apt-cache policy g++-1[0-9] | grep -A 2 '^g++-1'

g++-10:
  Установлено: (нет)
  Кандидат: 10.5.0-4ubuntu2
--
g++-11:
  Установлено: (нет)
  Кандидат: 11.4.0-9ubuntu1
--
g++-12:
  Установлено: 12.3.0-17ubuntu1
  Кандидат: 12.3.0-17ubuntu1
--
g++-13:
  Установлено: 13.3.0-6ubuntu2~24.04
  Кандидат: 13.3.0-6ubuntu2~24.04
--
g++-14:
  Установлено: 14.2.0-4ubuntu2~24.04
  Кандидат: 14.2.0-4ubuntu2~24.04

Для справки, вот какие версии в настоящее время доступны на Debian 12 для Pi, т.е. версии 10+, как выше:

$ apt-cache policy g++-1[0-9] | grep -A 2 '^g++-1'

g++-10:
  Установлено: (нет)
  Кандидат: (нет)
--
g++-11:
  Установлено: (нет)
  Кандидат: 11.3.0-12
--
g++-12:
  Установлено: 12.2.0-14
  Кандидат: 12.2.0-14
--
g++-13:
  Установлено: (нет)
  Кандидат: (нет)

Нет, нет никаких признаков g++-14, даже g++-13 пока недоступен. Так что мой вопрос выше остается актуальным. Спасибо заранее.

Предупреждение

@StephenKitt указывает, что ниже описанная операция опасна, так как вы можете оказаться с сломанной системой (виртуальная машина, на которой я пробовал это, в порядке, но это не была arm64 виртуальная машина и на ней не было установлено графического интерфейса).

Вашим альтернативным вариантом является получение файла .dsc с пакетов.debian.org для gcc 14 от trixie и последующая сборка этого с помощью dpkg-buildpackage. Инструкции для GCC12 на Ubuntu 20.04, которые я написал в этом ответе, также решат вашу проблему, но потребуют компиляции из исходников.

Основной текст

Debian позволяет вам настроить «смешанные» источники пакетов, где вы получаете пакеты из «новой» версии дистрибутива только когда это явно запрашивается/строго необходимо.

Для этого вам нужно

  1. добавить репозиторий trixie (текущая тестовая версия debian)
  2. сказать apt, что он не должен использовать это по умолчанию
  3. явно установить gcc из этого репозитория

1. добавить репозиторий trixie (текущая тестовая версия debian)

скопируйте текущее спецификацию репозитория

sudo cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/triixie.sources

и измените pixie.sources, чтобы он содержал только trixie; он должен выглядеть так:

Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

2. сказать apt, что он не должен использовать это по умолчанию

создайте файл nvim /etc/apt/preferences.d/99debian-trixie, содержащий:

Package: *
Pin: release a=testing
Pin-Priority: 100

Проверьте, сработало ли это:

apt update
apt-cache policy
## Теперь это должно показать новый репозиторий trixie с приоритетом 100,
## а репозиторий bullseye по умолчанию должен оставаться с приоритетом 500
apt-cache policy gcc
## Теперь должен быть перечислен GCC 14 из trixie в качестве низкоприоритетной альтернативы
## для gcc по умолчанию.

3. явно установить gcc из этого репозитория

(и пока мы на этом, также обычные инструменты сборки в их более современной версии trixie)

apt install -t trixie gcc g++ gdb cmake clang-format

Ответ или решение

Конечно, возможно собрать актуальную версию g++ (версия 14 или 13) на Raspberry Pi, работающем под управлением Debian 12 arm64. Рассмотрим процесс более подробно.

1. Причины для компиляции новейшей версии g++

Поскольку в Debian 12 (Bookworm) доступна только версия g++ 12, вы можете столкнуться с определенными ограничениями при использовании более современных функций языка C++. Компиляция g++ 14 или 13 даст возможность воспользоваться новейшими стандартами и улучшениями языка, а также исправлениями ошибок.

2. Подготовка окружения

Перед началом сборки вам нужно убедиться, что у вас установлены все необходимые пакеты для компиляции, включая build-essential и другие утилиты для работы.

sudo apt update
sudo apt install build-essential wget git

3. Настройка смешанных источников пакетов

Чтобы получить доступ к более новым версиям g++, вы можете настроить свою систему так, чтобы она использовала пакеты из "testing" ветки Debian (текущая версия – Trixie). Выполните следующие шаги:

3.1. Добавление репозитория Trixie

  1. Создайте резервную копию текущего файла источников:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  1. Откройте файл sources.list для редактирования:
sudo nano /etc/apt/sources.list
  1. Добавьте следующую строку для источника Trixie:
deb http://deb.debian.org/debian/ trixie main

3.2. Настройка приоритета для пакетов

Для того чтобы Debian не использовал пакеты из testing по умолчанию, создайте файл приоритетов:

  1. Создайте файл приоритетов:
sudo nano /etc/apt/preferences.d/99debian-trixie
  1. Добавьте следующие строки:
Package: *
Pin: release a=testing
Pin-Priority: 100

3.3. Обновите информацию о пакетах

Теперь обновите список доступных пакетов:

sudo apt update

4. Установка g++ из репозитория Trixie

Теперь вы можете установить g++ версии 14 или 13 из репозитория Trixie:

sudo apt install -t trixie g++

5. Альтернативный метод: Сборка из исходников

Если по каким-то причинам вам не подходит установка через apt, вы можете собрать g++ из исходников.

5.1. Скачивание исходного кода

Сначала загрузите нужный пакет:

wget http://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.gz
tar -xvf gcc-14.2.0.tar.gz
cd gcc-14.2.0

5.2. Установка зависимостей

Проверьте, что у вас установлены все необходимые библиотеки:

sudo apt install libmpfr-dev libgmp-dev libmpc-dev

5.3. Конфигурация и сборка

Создайте директорию для сборки и сконфигурируйте проект:

mkdir build && cd build
../configure --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install

Заключение

Следуя приведенным выше шагам, вы сможете успешно установить или собрать g++ 14 или 13 на Raspberry Pi под управлением Debian 12 arm64. Это предоставит вам доступ к более современным функциям языка и улучшенной производительности. Не забудьте сделать резервные копии и быть аккуратным с настройками репозиториев, чтобы избежать возможных конфликтов или проблем с зависимостями.

Оцените материал
Добавить комментарий

Капча загружается...