diff options
Diffstat (limited to 'lfs-12.0-sysv/chapter05/gcc-pass1.html')
-rw-r--r-- | lfs-12.0-sysv/chapter05/gcc-pass1.html | 334 |
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 > \ - `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">Раздел 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> |