summaryrefslogtreecommitdiff
path: root/lfs-12.1-sysv/chapter06/gcc-pass2.html
diff options
context:
space:
mode:
authorSn4il <sn4il@thedroth.rocks>2024-09-02 15:54:35 +0300
committerSn4il <sn4il@thedroth.rocks>2024-09-02 15:54:35 +0300
commit2203e654b389586650d553251b04544a34f189bf (patch)
tree0125b69fc70a2506c53158ba2020993a5b8985b7 /lfs-12.1-sysv/chapter06/gcc-pass2.html
parent200d528e55ca954d37769f4d143f10c9519b00e7 (diff)
downloadsn4il-site-2203e654b389586650d553251b04544a34f189bf.tar.gz
sn4il-site-2203e654b389586650d553251b04544a34f189bf.zip
LFS 12.2
Diffstat (limited to 'lfs-12.1-sysv/chapter06/gcc-pass2.html')
-rw-r--r--lfs-12.1-sysv/chapter06/gcc-pass2.html273
1 files changed, 0 insertions, 273 deletions
diff --git a/lfs-12.1-sysv/chapter06/gcc-pass2.html b/lfs-12.1-sysv/chapter06/gcc-pass2.html
deleted file mode 100644
index a406e4d..0000000
--- a/lfs-12.1-sysv/chapter06/gcc-pass2.html
+++ /dev/null
@@ -1,273 +0,0 @@
-<!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-13.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.1">
- <div class="navheader">
- <h4>
- Линукс с нуля - Версия 12.1
- </h4>
- <h3>
- Глава 6. Кросс-Компиляция временных инструментов
- </h3>
- <ul>
- <li class="prev">
- <a accesskey="p" href="binutils-pass2.html" title=
- "Binutils-2.42 - Проход 2">Пред.</a>
- <p>
- Binutils-2.42 - Проход 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.1">Начало</a>
- </li>
- </ul>
- </div>
- <h1 class="sect1">
- <a id="ch-tools-gcc-pass2" name="ch-tools-gcc-pass2"></a>6.18.
- GCC-13.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.4 SBU</span>
- </div>
- <div class="seg">
- <strong class="segtitle">Требуемое дисковое
- пространство:</strong> <span class="segbody">4.8 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>, собранную на этом этапе, вместо
- статической версии, собранной в GCC Проход 1. Это необходимо
- для поддержки обработки исключений C++
- </p>
- </dd>
- <dt>
- <span class="term"><em class=
- "parameter"><code>--disable-libsanitizer</code></em></span>
- </dt>
- <dd>
- <p>
- Отключает библиотеки среды выполнения GCC sanitizer. Они не
- нужны для временного набора инструментов. Этот параметр
- необходим для сборки GCC без установки <code class=
- "systemitem">libcrypt</code> для целевого объекта. В
- <a class="xref" href="../chapter05/gcc-pass1.html" title=
- "5.3. GCC-13.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.28.2. Содержимое пакета GCC">Раздел&nbsp;8.28.2, «Содержимое
- пакета GCC.»</a>
- </p>
- </div>
- </div>
- <div class="navfooter">
- <ul>
- <li class="prev">
- <a accesskey="p" href="binutils-pass2.html" title=
- "Binutils-2.42 - Проход 2">Пред.</a>
- <p>
- Binutils-2.42 - Проход 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.1">Начало</a>
- </li>
- </ul>
- </div>
- </body>
-</html>