diff options
author | Sn4il <sn4il@thedroth.rocks> | 2024-09-02 15:54:35 +0300 |
---|---|---|
committer | Sn4il <sn4il@thedroth.rocks> | 2024-09-02 15:54:35 +0300 |
commit | 2203e654b389586650d553251b04544a34f189bf (patch) | |
tree | 0125b69fc70a2506c53158ba2020993a5b8985b7 /lfs-12.2-sysv/chapter06/gcc-pass2.html | |
parent | 200d528e55ca954d37769f4d143f10c9519b00e7 (diff) | |
download | sn4il-site-2203e654b389586650d553251b04544a34f189bf.tar.gz sn4il-site-2203e654b389586650d553251b04544a34f189bf.zip |
LFS 12.2
Diffstat (limited to 'lfs-12.2-sysv/chapter06/gcc-pass2.html')
-rw-r--r-- | lfs-12.2-sysv/chapter06/gcc-pass2.html | 273 |
1 files changed, 273 insertions, 0 deletions
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 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 6.18. GCC-14.2.0 - Проход 2 + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.2"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.2 + </h4> + <h3> + Глава 6. Кросс-Компиляция временных инструментов + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass2.html" title= + "Binutils-2.43.1 - Проход 2">Пред.</a> + <p> + Binutils-2.43.1 - Проход 2 + </p> + </li> + <li class="next"> + <a accesskey="n" href="../chapter07/chapter07.html" title= + "Вход в окружение Chroot и создание дополнительных временных инструментов"> + След.</a> + <p> + Вход в окружение Chroot и создание дополнительных временных + инструментов + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter06.html" title= + "Глава 6. Кросс-Компиляция временных инструментов">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.2">Начало</a> + </li> + </ul> + </div> + <h1 class="sect1"> + <a id="ch-tools-gcc-pass2" name="ch-tools-gcc-pass2"></a>6.18. + GCC-14.2.0 - Проход 2 + </h1> + <div class="wrap" lang="ru" xml:lang="ru"> + <div class="package" lang="ru" xml:lang="ru"> + <p> + Пакет GCC содержит коллекцию компиляторов GNU, которая включает + компиляторы C и C++. + </p> + <div class="segmentedlist"> + <div class="seglistitem"> + <div class="seg"> + <strong class="segtitle">Приблизительное время сборки:</strong> + <span class="segbody">4.2 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">5.5 GB</span> + </div> + </div> + </div> + </div> + <div class="installation" lang="ru" xml:lang="ru"> + <h2 class="sect2"> + 6.18.1. Установка пакета GCC + </h2> + <p> + Как и при первой сборке GCC, требуются пакеты GMP, MPFR и MPC. + Распакуйте архивы и переименуйте каталоги: + </p> + <pre class="userinput"><kbd class= + "command">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</kbd></pre> + <p> + При сборке на x86_64 измените имя каталога по умолчанию для + 64-разрядных библиотек на <span class="quote">«<span class= + "quote">lib</span>»</span>: + </p> + <pre class="userinput"><kbd class="command">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</kbd></pre> + <p> + Переопределите правила сборки заголовочных файлов libgcc и + libstdc++, чтобы разрешить создание этих библиотек с поддержкой + потоков POSIX: + </p> + <pre class="userinput"><kbd class= + "command">sed '/thread_header =/s/@.*@/gthr-posix.h/' \ + -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in</kbd></pre> + <p> + Снова создайте отдельный каталог сборки: + </p> + <pre class="userinput"><kbd class="command">mkdir -v build +cd build</kbd></pre> + <p> + Перед началом сборки GCC не забудьте отключить все переменные + среды, которые переопределяют флаги оптимизации по умолчанию. + </p> + <p> + Теперь подготовьте GCC к компиляции: + </p> + <pre class="userinput"><kbd class= + "command">../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++</kbd></pre> + <div class="variablelist"> + <p class="title"> + <strong>Значение новых параметров настройки:</strong> + </p> + <dl class="variablelist"> + <dt> + <span class="term"><em class= + "parameter"><code>--with-build-sysroot=$LFS</code></em></span> + </dt> + <dd> + <p> + Обычно, использование <em class= + "parameter"><code>--host</code></em> гарантирует, что для + сборки GCC используется кросс-компилятор, и этот компилятор + знает, что он должен искать заголовочные файлы и библиотеки в + <code class="filename">$LFS</code>. Но сборочная система GCC + использует другие инструменты, которые не знают об этом + местоположении. Этот параметр необходим для того, чтобы они + могли найти нужные файлы в <code class= + "filename">$LFS</code>, а не на хосте. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--target=$LFS_TGT</code></em></span> + </dt> + <dd> + <p> + Поскольку мы выполняем кросс-компиляцию GCC, невозможно + собрать целевые библиотеки (<code class= + "filename">libgcc</code> и <code class= + "filename">libstdc++</code>) с помощью двоичных файлов GCC, + скомпилированных на этом шаге, эти двоичные файлы не будут + работать на хост-дистрибутиве. Система сборки GCC по + умолчанию попытается использовать компиляторы C и C++ хоста в + качестве обходного пути. Сейчас не поддерживается создание + целевых библиотек GCC с помощью другой версии GCC, поэтому + использование компиляторов хоста может привести к сбою + сборки. Этот параметр гарантирует сборку библиотек с помощью + GCC собранного в предыдущей главе. + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>LDFLAGS_FOR_TARGET=...</code></em></span> + </dt> + <dd> + <p> + Разрешить <code class="filename">libstdc++</code> + использовать <code class="filename">libgcc</code>, собранную + на этом этапе, вместо предыдущей версии, собранной в + <a class="xref" href="../chapter05/gcc-pass1.html" title= + "5.3. GCC-14.2.0 - Проход 1">GCC-Проход 1</a>. Предыдущая + версия не поддерживает должным образом обработку исключений + на C++, поскольку она была собрана без поддержки libc + </p> + </dd> + <dt> + <span class="term"><em class= + "parameter"><code>--disable-libsanitizer</code></em></span> + </dt> + <dd> + <p> + Отключает библиотеки среды выполнения GCC sanitizer. Они не + нужны для временного набора инструментов. В <a class="xref" + href="../chapter05/gcc-pass1.html" title= + "5.3. GCC-14.2.0 - Проход 1">GCC-Проход 1</a> это решалось с + помощью параметра <em class= + "parameter"><code>--disable-libstdcxx</code></em>, но теперь + мы должны передать его явно. + </p> + </dd> + </dl> + </div> + <p> + Скомпилируйте пакет: + </p> + <pre class="userinput"><kbd class="command">make</kbd></pre> + <p> + Установите пакет: + </p> + <pre class="userinput"><kbd class= + "command">make DESTDIR=$LFS install</kbd></pre> + <p> + В качестве завершающего штриха создайте символическую ссылку на + утилиту. Многие программы и скрипты используют <span class= + "command"><strong>cc</strong></span> вместо <span class= + "command"><strong>gcc</strong></span>, чтобы сделать программы + более универсальными и, следовательно, для совместимости со всеми + типами UNIX-систем, где компилятор GNU C не всегда установлен. + Наличие <span class="command"><strong>cc</strong></span> оставляет + системному администратору право самостоятельно решать, какой + компилятор C устанавливать: + </p> + <pre class="userinput"><kbd class= + "command">ln -sv gcc $LFS/usr/bin/cc</kbd></pre> + </div> + <div class="content" lang="ru" xml:lang="ru"> + <p> + Подробная информация об этом пакете находится в <a class="xref" + href="../chapter08/gcc.html#contents-gcc" title= + "8.29.2. Содержимое пакета GCC">Раздел 8.29.2, «Содержимое + пакета GCC.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass2.html" title= + "Binutils-2.43.1 - Проход 2">Пред.</a> + <p> + Binutils-2.43.1 - Проход 2 + </p> + </li> + <li class="next"> + <a accesskey="n" href="../chapter07/chapter07.html" title= + "Вход в окружение Chroot и создание дополнительных временных инструментов"> + След.</a> + <p> + Вход в окружение Chroot и создание дополнительных временных + инструментов + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter06.html" title= + "Глава 6. Кросс-Компиляция временных инструментов">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.2">Начало</a> + </li> + </ul> + </div> + </body> +</html> |