diff options
Diffstat (limited to 'lfs-12.2-sysv/chapter05/gcc-pass1.html')
-rw-r--r-- | lfs-12.2-sysv/chapter05/gcc-pass1.html | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/lfs-12.2-sysv/chapter05/gcc-pass1.html b/lfs-12.2-sysv/chapter05/gcc-pass1.html new file mode 100644 index 0000000..97b8075 --- /dev/null +++ b/lfs-12.2-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-14.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.2"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.2 + </h4> + <h3> + Глава 5. Сборка кросс-тулчейна + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass1.html" title= + "Binutils-2.43.1 - Проход 1">Пред.</a> + <p> + Binutils-2.43.1 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.10.5 API">След.</a> + <p> + Заголовочные файлы Linux-6.10.5 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.2">Начало</a> + </li> + </ul> + </div> + <h1 class="sect1"> + <a id="ch-tools-gcc-pass1" name="ch-tools-gcc-pass1"></a>5.3. + GCC-14.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.2 SBU</span> + </div> + <div class="seg"> + <strong class="segtitle">Требуемое дисковое + пространство:</strong> <span class="segbody">4.9 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-14.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.40 \ + --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.40</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 > \ + `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.29.2. Содержимое пакета GCC">Раздел 8.29.2, «Содержимое + пакета GCC.»</a> + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="binutils-pass1.html" title= + "Binutils-2.43.1 - Проход 1">Пред.</a> + <p> + Binutils-2.43.1 - Проход 1 + </p> + </li> + <li class="next"> + <a accesskey="n" href="linux-headers.html" title= + "Заголовочные файлы Linux-6.10.5 API">След.</a> + <p> + Заголовочные файлы Linux-6.10.5 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.2">Начало</a> + </li> + </ul> + </div> + </body> +</html> |