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

(GCC10) Astra Linux - Как обновить gcc до версии 10 - сборка из исходников?

GCC (GNU Compiler Collection) — это набор компиляторов, разработанный проектом GNU, который предназначен для преобразования исходного кода, написанного на различных языках программирования, в объектный код или непосредственно в исполняемый файл. Изначально GCC был создан для компиляции программ на языке C, но со временем был расширен и теперь поддерживает множество языков, включая: В Astra Linux 1.7 можно проверить версию компилятора $ gcc -v
gcc version 8.3.0 (AstraLinux 8.3.0-6+b1)
Эта версия достаточно старая и не в полном объеме поддерживает с++17 чтобы обновить ее сначала обновим binutils: https://dzen.ru/a/Z536TIaOnG_N1Dy2?share_to=link далее: нужно импортировать файл с объявленными переменными:
BINUTILS=${HOME}/opt/binutils-2_40 #=== Setup === source ${BINUTILS}/activate || { echo "BINUTILS: source failed! Activate BINUTILS missing or invalid?" exit 1 } Он выглядит так: export PATH=${HOME}/opt/binutils-2_40/bin:$PATH export LD_LIBRARY_PATH=${HOME}/opt/binutils-2_40/lib:$LD_L
Оглавление

Введение:

GCC (GNU Compiler Collection) — это набор компиляторов, разработанный проектом GNU, который предназначен для преобразования исходного кода, написанного на различных языках программирования, в объектный код или непосредственно в исполняемый файл. Изначально GCC был создан для компиляции программ на языке C, но со временем был расширен и теперь поддерживает множество языков, включая:

  • C
  • C++
  • Objective-C
  • Fortran
  • Ada
  • Go
  • D (экспериментальная поддержка)

Установка:

В Astra Linux 1.7 можно проверить версию компилятора

$ gcc -v
gcc version 8.3.0 (AstraLinux 8.3.0-6+b1)
Эта версия достаточно старая и не в полном объеме поддерживает с++17

Этап 1. Сборка binutils

чтобы обновить ее сначала обновим binutils:

https://dzen.ru/a/Z536TIaOnG_N1Dy2?share_to=link

далее:

нужно импортировать файл с объявленными переменными:
BINUTILS=${HOME}/opt/binutils-2_40

#=== Setup ===

source ${BINUTILS}/activate || {
echo "BINUTILS: source failed! Activate BINUTILS missing or invalid?"
exit 1
}

Он выглядит так:

export PATH=${HOME}/opt/binutils-2_40/bin:$PATH
export LD_LIBRARY_PATH=${HOME}/opt/binutils-2_40/lib:$LD_LIBRARY_PATH
export CFLAGS="-I${HOME}/opt/binutils-2_40/include $CFLAGS"
export LDFLAGS="-L${HOME}/opt/binutils-2_40/lib $LDFLAGS"
export AR=${HOME}/opt/binutils-2_40/bin/ar
export AS=${HOME}/opt/binutils-2_40/bin/as
export LD=${HOME}/opt/binutils-2_40/bin/ld
export RANLIB=${HOME}/opt/binutils-2_40/bin/ranlib
export MANPATH=${HOME}/opt/binutils-2_40/share/man:$MANPATH
export INFOPATH=${HOME}/opt/binutils-2_40/share/info:$INFOPATH
export C_INCLUDE_PATH=${HOME}/opt/binutils-2_40/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=${HOME}/opt/binutils-2_40/include:$CPLUS_INCLUDE_PATH

Важно:

использовать именно source или «.» тогда переменные будут работать в текущей сессии оболочки.

Этап 2.

клонируем репозиторий

git clone https://gitflic.ru/project/litvinov_mv/astra-linux-gcc10.git
cd astra-linux-gcc10
sh run.sh

Эта команда выполняет активацию уже собранной версии binutils и запускает сборку gcc,

устанавливая нужные зависимости и скачивая библиотеки

Этап 3

В результате получим

в папке ${HOME}/opt/gcc-10.1.0 получим собранный компилятор,

а также в корне файл: ./activate

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

export PATH=${HOME}/opt/gcc-10.1.0/bin:$PATH
export LD_LIBRARY_PATH=${HOME}/opt/gcc-10.1.0/lib:${HOME}/opt/gcc-10.1.0/lib64:$LD_LIBRARY_PATH
export MANPATH=${HOME}/opt/gcc-10.1.0/share/man:$MANPATH
export INFOPATH=${HOME}/opt/gcc-10.1.0/share/info:$INFOPATH

Применение:

Перед началом сборки

GCC=${HOME}/opt/gcc-10.1.0
source ${GCC}/activate || {
echo "${GCC}: source failed! Activate GCC10 missing or invalid?"
exit 1
}

Проверить переменные можно так:

sh ${PATH}

Проверить версию 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