summaryrefslogtreecommitdiff
path: root/lfs-12.1-sysv/chapter06/gcc-pass2.html
diff options
context:
space:
mode:
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, 273 insertions, 0 deletions
diff --git a/lfs-12.1-sysv/chapter06/gcc-pass2.html b/lfs-12.1-sysv/chapter06/gcc-pass2.html
new file mode 100644
index 0000000..a406e4d
--- /dev/null
+++ b/lfs-12.1-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-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>