From 2203e654b389586650d553251b04544a34f189bf Mon Sep 17 00:00:00 2001 From: Sn4il Date: Mon, 2 Sep 2024 15:54:35 +0300 Subject: LFS 12.2 --- lfs-12.2-sysv/chapter06/gcc-pass2.html | 273 +++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 lfs-12.2-sysv/chapter06/gcc-pass2.html (limited to 'lfs-12.2-sysv/chapter06/gcc-pass2.html') diff --git a/lfs-12.2-sysv/chapter06/gcc-pass2.html b/lfs-12.2-sysv/chapter06/gcc-pass2.html new file mode 100644 index 0000000..5024ef9 --- /dev/null +++ b/lfs-12.2-sysv/chapter06/gcc-pass2.html @@ -0,0 +1,273 @@ + + + + + + 6.18. GCC-14.2.0 - Проход 2 + + + + + + + + +

+ 6.18. + GCC-14.2.0 - Проход 2 +

+
+
+

+ Пакет GCC содержит коллекцию компиляторов GNU, которая включает + компиляторы C и C++. +

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

+ 6.18.1. Установка пакета GCC +

+

+ Как и при первой сборке GCC, требуются пакеты GMP, MPFR и MPC. + Распакуйте архивы и переименуйте каталоги: +

+
tar -xf ../mpfr-4.2.1.tar.xz
+mv -v mpfr-4.2.1 mpfr
+tar -xf ../gmp-6.3.0.tar.xz
+mv -v gmp-6.3.0 gmp
+tar -xf ../mpc-1.3.1.tar.gz
+mv -v mpc-1.3.1 mpc
+

+ При сборке на x86_64 измените имя каталога по умолчанию для + 64-разрядных библиотек на «lib»: +

+
case $(uname -m) in
+  x86_64)
+    sed -e '/m64=/s/lib64/lib/' \
+        -i.orig gcc/config/i386/t-linux64
+  ;;
+esac
+

+ Переопределите правила сборки заголовочных файлов libgcc и + libstdc++, чтобы разрешить создание этих библиотек с поддержкой + потоков POSIX: +

+
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
+    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
+

+ Снова создайте отдельный каталог сборки: +

+
mkdir -v build
+cd       build
+

+ Перед началом сборки GCC не забудьте отключить все переменные + среды, которые переопределяют флаги оптимизации по умолчанию. +

+

+ Теперь подготовьте GCC к компиляции: +

+
../configure                                       \
+    --build=$(../config.guess)                     \
+    --host=$LFS_TGT                                \
+    --target=$LFS_TGT                              \
+    LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc      \
+    --prefix=/usr                                  \
+    --with-build-sysroot=$LFS                      \
+    --enable-default-pie                           \
+    --enable-default-ssp                           \
+    --disable-nls                                  \
+    --disable-multilib                             \
+    --disable-libatomic                            \
+    --disable-libgomp                              \
+    --disable-libquadmath                          \
+    --disable-libsanitizer                         \
+    --disable-libssp                               \
+    --disable-libvtv                               \
+    --enable-languages=c,c++
+
+

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

+
+
+ --with-build-sysroot=$LFS +
+
+

+ Обычно, использование --host гарантирует, что для + сборки GCC используется кросс-компилятор, и этот компилятор + знает, что он должен искать заголовочные файлы и библиотеки в + $LFS. Но сборочная система GCC + использует другие инструменты, которые не знают об этом + местоположении. Этот параметр необходим для того, чтобы они + могли найти нужные файлы в $LFS, а не на хосте. +

+
+
+ --target=$LFS_TGT +
+
+

+ Поскольку мы выполняем кросс-компиляцию GCC, невозможно + собрать целевые библиотеки (libgcc и libstdc++) с помощью двоичных файлов GCC, + скомпилированных на этом шаге, эти двоичные файлы не будут + работать на хост-дистрибутиве. Система сборки GCC по + умолчанию попытается использовать компиляторы C и C++ хоста в + качестве обходного пути. Сейчас не поддерживается создание + целевых библиотек GCC с помощью другой версии GCC, поэтому + использование компиляторов хоста может привести к сбою + сборки. Этот параметр гарантирует сборку библиотек с помощью + GCC собранного в предыдущей главе. +

+
+
+ LDFLAGS_FOR_TARGET=... +
+
+

+ Разрешить libstdc++ + использовать libgcc, собранную + на этом этапе, вместо предыдущей версии, собранной в + GCC-Проход 1. Предыдущая + версия не поддерживает должным образом обработку исключений + на C++, поскольку она была собрана без поддержки libc +

+
+
+ --disable-libsanitizer +
+
+

+ Отключает библиотеки среды выполнения GCC sanitizer. Они не + нужны для временного набора инструментов. В GCC-Проход 1 это решалось с + помощью параметра --disable-libstdcxx, но теперь + мы должны передать его явно. +

+
+
+
+

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

+
make
+

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

+
make DESTDIR=$LFS install
+

+ В качестве завершающего штриха создайте символическую ссылку на + утилиту. Многие программы и скрипты используют cc вместо gcc, чтобы сделать программы + более универсальными и, следовательно, для совместимости со всеми + типами UNIX-систем, где компилятор GNU C не всегда установлен. + Наличие cc оставляет + системному администратору право самостоятельно решать, какой + компилятор C устанавливать: +

+
ln -sv gcc $LFS/usr/bin/cc
+
+
+

+ Подробная информация об этом пакете находится в Раздел 8.29.2, «Содержимое + пакета GCC.» +

+
+
+ + + -- cgit v1.2.3