summaryrefslogtreecommitdiff
path: root/lfs-12.0-sysv/chapter05/gcc-pass1.html
diff options
context:
space:
mode:
Diffstat (limited to 'lfs-12.0-sysv/chapter05/gcc-pass1.html')
-rw-r--r--lfs-12.0-sysv/chapter05/gcc-pass1.html334
1 files changed, 0 insertions, 334 deletions
diff --git a/lfs-12.0-sysv/chapter05/gcc-pass1.html b/lfs-12.0-sysv/chapter05/gcc-pass1.html
deleted file mode 100644
index 004a062..0000000
--- a/lfs-12.0-sysv/chapter05/gcc-pass1.html
+++ /dev/null
@@ -1,334 +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>
- 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 V1.79.1" />
- <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.0">
- <div class="navheader">
- <h4>
- Линукс с нуля - Версия 12.0
- </h4>
- <h3>
- Глава 5. Сборка кросс-тулчейна
- </h3>
- <ul>
- <li class="prev">
- <a accesskey="p" href="binutils-pass1.html" title=
- "Binutils-2.41 - Проход 1">Пред.</a>
- <p>
- Binutils-2.41 - Проход 1
- </p>
- </li>
- <li class="next">
- <a accesskey="n" href="linux-headers.html" title=
- "Заголовочные файлы Linux-6.4.12 API">След.</a>
- <p>
- Заголовочные файлы Linux-6.4.12 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.0">Начало</a>
- </li>
- </ul>
- </div>
- <div class="wrap" lang="en" xml:lang="en">
- <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="package" lang="en" xml:lang="en">
- <p>
- Пакет GCC содержит коллекцию компиляторов GNU, которая включает
- компиляторы C и C++.
- </p>
- <div class="segmentedlist">
- <div class="seglistitem">
- <div class="seg">
- <strong class="segtitle">Приблизительное время сборки:</strong>
- <span class="segbody">3.5 SBU</span>
- </div>
- <div class="seg">
- <strong class="segtitle">Требуемое дисковое
- пространство:</strong> <span class="segbody">4.2 GB</span>
- </div>
- </div>
- </div>
- </div>
- <div class="installation" lang="en" xml:lang="en">
- <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.0.tar.xz
-mv -v mpfr-4.2.0 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.38 \
- --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.38</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="en" xml:lang="en">
- <p>
- Подробная информация об этом пакете находится в <a class="xref"
- href="../chapter08/gcc.html#contents-gcc" title=
- "8.27.2. Содержимое пакета GCC">Раздел&nbsp;8.27.2, «Содержимое
- пакета GCC.»</a>
- </p>
- </div>
- </div>
- <div class="navfooter">
- <ul>
- <li class="prev">
- <a accesskey="p" href="binutils-pass1.html" title=
- "Binutils-2.41 - Проход 1">Пред.</a>
- <p>
- Binutils-2.41 - Проход 1
- </p>
- </li>
- <li class="next">
- <a accesskey="n" href="linux-headers.html" title=
- "Заголовочные файлы Linux-6.4.12 API">След.</a>
- <p>
- Заголовочные файлы Linux-6.4.12 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.0">Начало</a>
- </li>
- </ul>
- </div>
- </body>
-</html>