summaryrefslogtreecommitdiff
path: root/lfs-12.1-sysv/chapter05/gcc-pass1.html
diff options
context:
space:
mode:
Diffstat (limited to 'lfs-12.1-sysv/chapter05/gcc-pass1.html')
-rw-r--r--lfs-12.1-sysv/chapter05/gcc-pass1.html332
1 files changed, 332 insertions, 0 deletions
diff --git a/lfs-12.1-sysv/chapter05/gcc-pass1.html b/lfs-12.1-sysv/chapter05/gcc-pass1.html
new file mode 100644
index 0000000..ffe0d93
--- /dev/null
+++ b/lfs-12.1-sysv/chapter05/gcc-pass1.html
@@ -0,0 +1,332 @@
+<!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>
+ 5.3. GCC-13.2.0 - Проход 1
+ </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>
+ Глава 5. Сборка кросс-тулчейна
+ </h3>
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="binutils-pass1.html" title=
+ "Binutils-2.42 - Проход 1">Пред.</a>
+ <p>
+ Binutils-2.42 - Проход 1
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="linux-headers.html" title=
+ "Заголовочные файлы Linux-6.7.4 API">След.</a>
+ <p>
+ Заголовочные файлы Linux-6.7.4 API
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="chapter05.html" title=
+ "Глава 5. Сборка кросс-тулчейна">Наверх</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-pass1" name="ch-tools-gcc-pass1"></a>5.3.
+ GCC-13.2.0 - Проход 1
+ </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">3.8 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">4.1 GB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ 5.3.1. Установка кросс-пакета GCC
+ </h2>
+ <p>
+ Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты
+ могут отсутствовать в дистрибутиве вашего хоста, они будут собраны
+ с помощью GCC. Распакуйте каждый пакет в исходный каталог GCC и
+ переименуйте получившиеся каталоги, чтобы процедуры сборки GCC
+ использовали их автоматически:
+ </p>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ В этой главе часто возникают недоразумения, хотя применяются те
+ же процедуры, что и в любой другой главе, следуйте инструкции
+ которую получили ранее (<a class="xref" href=
+ "../partintro/generalinstructions.html#buildinstr">Инструкции по
+ сборке пакетов</a>). Сначала распакуйте пакет gcc-13.2.0 из
+ архива, а затем перейдите в созданный каталог. Только после этого
+ следует приступить к приведенным ниже инструкциям.
+ </p>
+ </div>
+ <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>
+ В документации к GCC рекомендуется собирать GCC в отдельном
+ каталоге:
+ </p>
+ <pre class="userinput"><kbd class="command">mkdir -v build
+cd build</kbd></pre>
+ <p>
+ Подготовьте GCC к компиляции:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">../configure \
+ --target=$LFS_TGT \
+ --prefix=$LFS/tools \
+ --with-glibc-version=2.39 \
+ --with-sysroot=$LFS \
+ --with-newlib \
+ --without-headers \
+ --enable-default-pie \
+ --enable-default-ssp \
+ --disable-nls \
+ --disable-shared \
+ --disable-multilib \
+ --disable-threads \
+ --disable-libatomic \
+ --disable-libgomp \
+ --disable-libquadmath \
+ --disable-libssp \
+ --disable-libvtv \
+ --disable-libstdcxx \
+ --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-glibc-version=2.39</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр указывает версию Glibc, которая будет
+ использоваться на целевой системе. Он не имеет отношения к
+ libc хост-дистрибутива, потому что все, скомпилированное в
+ этом разделе, будет выполняться в среде chroot, которая
+ изолирована от libc хост-дистрибутива.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--with-newlib</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Поскольку работающая библиотека C еще недоступна, это
+ гарантирует, что константа inhibit_libc будет определена при
+ сборке libgcc. Это предотвращает компиляцию любого кода,
+ требующего поддержки libc.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--without-headers</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ При создании полного кросс-компилятора GCC требует наличия
+ стандартных заголовков, совместимых с целевой системой. Для
+ наших целей эти заголовки не понадобятся. Этот параметр
+ предотвращает их поиск GCC.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-default-pie и
+ --enable-default-ssp</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Эти параметры позволяют GCC по умолчанию компилировать
+ программы с некоторые функциями усиливающими безопасность
+ (более подробная информация о них приведена в <a class="xref"
+ href="../chapter08/gcc.html#pie-ssp-info">примечание о PIE и
+ SSP</a> в Главе 8). На данном этапе это не является строго
+ обязательным, поскольку компилятор будет создавать только
+ временные исполняемые файлы. Но лучше, чтобы временные пакеты
+ были максимально приближены к тем, что будут в готовой
+ системе LFS.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-shared</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр заставляет GCC статически связывать свои
+ внутренние библиотеки. Он необходим потому что общие
+ библиотеки требуют Glibc, который еще не установлен в целевой
+ системе.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-multilib</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ На x86_64, LFS не поддерживает конфигурацию multilib. Этот
+ аргумент никак не влияет на работу с архитектурой x86.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-threads, --disable-libatomic,
+ --disable-libgomp, --disable-libquadmath, --disable-libssp,
+ --disable-libvtv, --disable-libstdcxx</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Эти аргументы отключают поддержку расширений для работы с
+ многопоточностью, libatomic, libgomp, libquadmath, libssp,
+ libvtv и стандартной библиотеки C++ соответственно. Эти
+ функции могут не скомпилироваться при сборке
+ кросс-компилятора и не нужны для задач кросс-компиляции
+ временной libc
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-languages=c,c++</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр обеспечивает сборку только компиляторов C и
+ C++. Это единственные языки, которые нужны сейчас.
+ </p>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Скомпилируйте GCC, выполнив:
+ </p>
+ <pre class="userinput"><kbd class="command">make</kbd></pre>
+ <p>
+ Установите пакет:
+ </p>
+ <pre class="userinput"><kbd class="command">make install</kbd></pre>
+ <p>
+ Во время сборки GCC установил пару внутренних системных
+ заголовочных файлов. Обычно один из файлов <code class=
+ "filename">limits.h</code>, включает соответствующие системные
+ ограничения <code class="filename">limits.h</code>, в данном случае
+ <code class="filename">$LFS/usr/include/limits.h</code>. Однако во
+ время сборки GCC <code class=
+ "filename">$LFS/usr/include/limits.h</code> не существует, поэтому
+ только что установленный внутренний заголовочный файл является
+ частичным, автономным файлом и не включает расширенные функции
+ системного файла. Этого достаточно для сборки Glibc, но полный
+ внутренний заголовочный файл понадобится позже. Создайте полную
+ версию внутреннего заголовочного файла с помощью команды,
+ идентичной той, что система сборки GCC использует обычно:
+ </p>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ В приведенной ниже команде показан пример подстановки вложенных
+ команд, используя два метода: обратные кавычки и конструкцию
+ <code class="literal">$()</code>. Его можно было бы переписать,
+ используя один и тот же метод для обеих замен, но сделано так,
+ чтобы продемонстрировать, как их можно использовать одновременно.
+ В целом метод <code class="literal">$()</code> предпочтительнее.
+ </p>
+ </div>
+ <pre class="userinput"><kbd class="command">cd ..
+cat gcc/limitx.h gcc/glimits.h gcc/limity.h &gt; \
+ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h</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-pass1.html" title=
+ "Binutils-2.42 - Проход 1">Пред.</a>
+ <p>
+ Binutils-2.42 - Проход 1
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="linux-headers.html" title=
+ "Заголовочные файлы Linux-6.7.4 API">След.</a>
+ <p>
+ Заголовочные файлы Linux-6.7.4 API
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="chapter05.html" title=
+ "Глава 5. Сборка кросс-тулчейна">Наверх</a>
+ </li>
+ <li class="home">
+ <a accesskey="h" href="../index.html" title=
+ "Линукс с нуля - Версия 12.1">Начало</a>
+ </li>
+ </ul>
+ </div>
+ </body>
+</html>