summaryrefslogtreecommitdiff
path: root/lfs-12.2-sysv/chapter05
diff options
context:
space:
mode:
Diffstat (limited to 'lfs-12.2-sysv/chapter05')
-rw-r--r--lfs-12.2-sysv/chapter05/binutils-pass1.html282
-rw-r--r--lfs-12.2-sysv/chapter05/chapter05.html110
-rw-r--r--lfs-12.2-sysv/chapter05/gcc-libstdc++.html214
-rw-r--r--lfs-12.2-sysv/chapter05/gcc-pass1.html332
-rw-r--r--lfs-12.2-sysv/chapter05/glibc.html374
-rw-r--r--lfs-12.2-sysv/chapter05/introduction.html94
-rw-r--r--lfs-12.2-sysv/chapter05/linux-headers.html315
7 files changed, 1721 insertions, 0 deletions
diff --git a/lfs-12.2-sysv/chapter05/binutils-pass1.html b/lfs-12.2-sysv/chapter05/binutils-pass1.html
new file mode 100644
index 0000000..fc7cd08
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/binutils-pass1.html
@@ -0,0 +1,282 @@
+<!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.2. Binutils-2.43.1 - Проход 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="introduction.html" title=
+ "Введение">Пред.</a>
+ <p>
+ Введение
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-pass1.html" title=
+ "GCC-14.2.0 - Проход 1">След.</a>
+ <p>
+ GCC-14.2.0 - Проход 1
+ </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-binutils-pass1" name="ch-tools-binutils-pass1"></a>5.2.
+ Binutils-2.43.1 - Проход 1
+ </h1>
+ <div class="wrap" lang="ru" xml:lang="ru">
+ <div class="package" lang="ru" xml:lang="ru">
+ <p>
+ Пакет Binutils содержит компоновщик, ассемблер и другие инструменты
+ для работы с объектными файлами.
+ </p>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Приблизительное время сборки:</strong>
+ <span class="segbody">1 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">677 MB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ 5.2.1. Установка кросс-пакета Binutils
+ </h2>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Вернитесь назад и перечитайте примечания в разделе <a class=
+ "xref" href="../partintro/generalinstructions.html" title=
+ "Общие инструкции по компиляции">Общие инструкции по
+ компиляции</a>. Понимание информации, помеченной как важная,
+ может впоследствии избавить вас от многих проблем.
+ </p>
+ </div>
+ <p>
+ Очень важно, чтобы Binutils был скомпилированным первым, потому что
+ и Glibc, и GCC выполняют различные тесты на доступных компоновщике
+ и ассемблере, чтобы определить, какие из их функций следует
+ включить.
+ </p>
+ <p>
+ В документации пакета Binutils рекомендуется выполнять сборку в
+ отдельном каталоге, создадим его:
+ </p>
+ <pre class="userinput"><kbd class="command">mkdir -v build
+cd build</kbd></pre>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Для того, чтобы значения SBU, перечисленные в остальной части
+ книги, были вам полезны, измерьте время, необходимое для сборки
+ этого пакета, начиная с настройки и заканчивая установкой. Чтобы
+ добиться этого, оберните команды сборки командой <span class=
+ "command"><strong>time</strong></span>: <strong class=
+ "userinput"><code>time { ../configure ... &amp;&amp; make
+ &amp;&amp; make install; }</code></strong>.
+ </p>
+ </div>
+ <p>
+ Теперь подготовьте Binutils к компиляции:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">../configure --prefix=$LFS/tools \
+ --with-sysroot=$LFS \
+ --target=$LFS_TGT \
+ --disable-nls \
+ --enable-gprofng=no \
+ --disable-werror \
+ --enable-new-dtags \
+ --enable-default-hash-style=gnu</kbd></pre>
+ <div class="variablelist">
+ <p class="title">
+ <strong>Значение параметров настройки:</strong>
+ </p>
+ <dl class="variablelist">
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--prefix=$LFS/tools</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Указывает сценарию configure подготовить к установке пакет
+ Binutils в каталог <code class="filename">$LFS/tools</code>.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--with-sysroot=$LFS</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Для кросс-компляции указывает системе сборки искать в $LFS
+ библиотеки целевой системы, если необходимо.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><code class=
+ "envar">--target=$LFS_TGT</code></span>
+ </dt>
+ <dd>
+ <p>
+ Поскольку название машины в значении переменной <code class=
+ "envar">LFS_TGT</code> может отличаться от значения, которое
+ возвращает сценарий <span class=
+ "command"><strong>config.guess</strong></span>, этот аргумент
+ укажет сценарию <span class=
+ "command"><strong>configure</strong></span> как настроить
+ систему сборки пакета Binutils для создания
+ кросс-компоновщика.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-nls</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр отключает интернационализацию, так как i18n не
+ требуется для временных инструментов.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-gprofng=no</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр отключает сборку gprofng, который не нужен для
+ временного инструментария.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-werror</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр предотвращает остановку сборки в случае
+ появления предупреждений от компилятора хоста.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-new-dtags</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр заставляет компоновщик использовать тег
+ <span class="quote">«<span class=
+ "quote">runpath</span>»</span> для встраивания путей поиска
+ библиотек в исполняемые файлы и общие библиотеки вместо
+ традиционного тега <span class="quote">«<span class=
+ "quote">rpath</span>»</span>. Это упрощает отладку
+ динамически подключаемых исполняемых файлов и устраняет
+ потенциальные проблемы в наборах тестов некоторых пакетов.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-default-hash-style=gnu</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ По умолчанию компоновщик генерирует как хеш-таблицу в стиле
+ GNU, так и классическую хеш-таблицу ELF для общих библиотек и
+ динамически связанных исполняемых файлов. Хеш-таблицы
+ необходимы только для динамического компоновщика,
+ выполняющего поиск символов. В LFS динамический компоновщик
+ (предоставляемый пакетом Glibc) всегда будет использовать
+ хеш-таблицу в стиле GNU, к которой запросы выполняются
+ быстрее. Так что классическая хеш-таблица ELF совершенно
+ бесполезна. Этот параметр указывает компоновщику по умолчанию
+ генерировать только хеш-таблицу в стиле GNU, поэтому мы можем
+ избежать траты времени на создание классической хеш-таблицы
+ ELF при сборке пакетов или не тратить дисковое пространство
+ для ее хранения.
+ </p>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Скомпилируйте пакет:
+ </p>
+ <pre class="userinput"><kbd class="command">make</kbd></pre>
+ <p>
+ Установите пакет:
+ </p>
+ <pre class="userinput"><kbd class="command">make install</kbd></pre>
+ </div>
+ <div class="content" lang="ru" xml:lang="ru">
+ <p>
+ Подробная информация об этом пакете находится в <a class="xref"
+ href="../chapter08/binutils.html#contents-binutils" title=
+ "8.20.2. Содержимое пакета Binutils">Раздел&nbsp;8.20.2,
+ «Содержимое пакета Binutils.»</a>
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="introduction.html" title=
+ "Введение">Пред.</a>
+ <p>
+ Введение
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-pass1.html" title=
+ "GCC-14.2.0 - Проход 1">След.</a>
+ <p>
+ GCC-14.2.0 - Проход 1
+ </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>
diff --git a/lfs-12.2-sysv/chapter05/chapter05.html b/lfs-12.2-sysv/chapter05/chapter05.html
new file mode 100644
index 0000000..59cc3ac
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/chapter05.html
@@ -0,0 +1,110 @@
+<!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. Сборка кросс-тулчейна
+ </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>
+ Часть&nbsp;III.&nbsp;Сборка кросс-компилятора и набора временных
+ инструментов
+ </h3>
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="../partintro/generalinstructions.html"
+ title="Общие инструкции по компиляции">Пред.</a>
+ <p>
+ Общие инструкции по компиляции
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="introduction.html" title=
+ "Введение">След.</a>
+ <p>
+ Введение
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="../part3.html" title=
+ "Часть&nbsp;III.&nbsp;Сборка кросс-компилятора и набора временных инструментов">
+ Наверх</a>
+ </li>
+ <li class="home">
+ <a accesskey="h" href="../index.html" title=
+ "Линукс с нуля - Версия 12.2">Начало</a>
+ </li>
+ </ul>
+ </div>
+ <h1 class="chapter">
+ <a id="chapter-cross-tools" name="chapter-cross-tools"></a>5. Сборка
+ кросс-тулчейна
+ </h1>
+ <div class="chapter" lang="ru" xml:lang="ru">
+ <div class="toc">
+ <h3>
+ Содержание
+ </h3>
+ <ul>
+ <li class="sect1">
+ <a href="introduction.html">Введение</a>
+ </li>
+ <li class="sect1">
+ <a href="binutils-pass1.html">Binutils-2.43.1 - Проход 1</a>
+ </li>
+ <li class="sect1">
+ <a href="gcc-pass1.html">GCC-14.2.0 - Проход 1</a>
+ </li>
+ <li class="sect1">
+ <a href="linux-headers.html">Заголовочные файлы Linux-6.10.5
+ API</a>
+ </li>
+ <li class="sect1">
+ <a href="glibc.html">Glibc-2.40</a>
+ </li>
+ <li class="sect1">
+ <a href="gcc-libstdc++.html">Libstdc++ из GCC-14.2.0</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="../partintro/generalinstructions.html"
+ title="Общие инструкции по компиляции">Пред.</a>
+ <p>
+ Общие инструкции по компиляции
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="introduction.html" title=
+ "Введение">След.</a>
+ <p>
+ Введение
+ </p>
+ </li>
+ <li class="up">
+ <a accesskey="u" href="../part3.html" title=
+ "Часть&nbsp;III.&nbsp;Сборка кросс-компилятора и набора временных инструментов">
+ Наверх</a>
+ </li>
+ <li class="home">
+ <a accesskey="h" href="../index.html" title=
+ "Линукс с нуля - Версия 12.2">Начало</a>
+ </li>
+ </ul>
+ </div>
+ </body>
+</html>
diff --git a/lfs-12.2-sysv/chapter05/gcc-libstdc++.html b/lfs-12.2-sysv/chapter05/gcc-libstdc++.html
new file mode 100644
index 0000000..cd4082d
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/gcc-libstdc++.html
@@ -0,0 +1,214 @@
+<!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.6. Libstdc++ из GCC-14.2.0
+ </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="glibc.html" title="Glibc-2.40">Пред.</a>
+ <p>
+ Glibc-2.40
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="../chapter06/chapter06.html" title=
+ "Кросс-Компиляция временных инструментов">След.</a>
+ <p>
+ Кросс-Компиляция временных инструментов
+ </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-libstdcpp" name="ch-tools-libstdcpp"></a>5.6. Libstdc++
+ из GCC-14.2.0
+ </h1>
+ <div class="wrap" lang="ru" xml:lang="ru">
+ <div class="package" lang="ru" xml:lang="ru">
+ <p>
+ Libstdc++ — это стандартная библиотека C++. Она нужна для
+ компиляции кода C++ (часть GCC написана на C++), когда мы собирали
+ <a class="xref" href="gcc-pass1.html" title=
+ "5.3. GCC-14.2.0 - Проход 1">GCC-Проход 1</a>, нам пришлось
+ отложить её установку, потому что она зависит от библиотеки Glibc,
+ которой еще не было в целевом каталоге.
+ </p>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Приблизительное время сборки:</strong>
+ <span class="segbody">0.2 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">1.2 GB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ 5.6.1. Установка библиотеки Libstdc++
+ </h2>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ <span class="application">Libstdc++</span> является частью
+ исходников GCC. Сначала вы должны распаковать архив GCC и перейти
+ в каталог <code class="filename">gcc-14.2.0</code>.
+ </p>
+ </div>
+ <p>
+ Создайте отдельный каталог сборки для libstdc++ и перейдите в него:
+ </p>
+ <pre class="userinput"><kbd class="command">mkdir -v build
+cd build</kbd></pre>
+ <p>
+ Подготовьте libstdc++ к компиляции:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">../libstdc++-v3/configure \
+ --host=$LFS_TGT \
+ --build=$(../config.guess) \
+ --prefix=/usr \
+ --disable-multilib \
+ --disable-nls \
+ --disable-libstdcxx-pch \
+ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/14.2.0</kbd></pre>
+ <div class="variablelist">
+ <p class="title">
+ <strong>Значение параметров настройки:</strong>
+ </p>
+ <dl class="variablelist">
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--host=...</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Указывает, что должен использоваться кросс-компилятор,
+ который мы только что собрали, вместо того, который находится
+ в <code class="filename">/usr/bin</code>.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-libstdcxx-pch</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот аргумент предотвращает установку предварительно
+ скомпилированных include-файлов, которые на данном этапе не
+ нужны.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/14.2.0</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Указывает каталог установки для include-файлов. Поскольку
+ libstdc++ является стандартной библиотекой C++ для LFS, этот
+ каталог должен соответствовать местоположению, в котором
+ компилятор C++ (<span class=
+ "command"><strong>$LFS_TGT-g++</strong></span>) будет искать
+ стандартные включаемые файлы C++. При обычной сборке эта
+ информация автоматически передается в Libstdc++ при
+ выполнении <span class=
+ "command"><strong>configure</strong></span> из каталога
+ верхнего уровня. В нашем случае эта информация должна быть
+ указана явно. Компилятор C++ добавит путь sysroot
+ <code class="filename">$LFS</code> (указанный при сборке GCC
+ Проход 1) к пути поиска include-файлов, поэтому фактически он
+ будет искать в <code class=
+ "filename">$LFS/tools/$LFS_TGT/include/c++/14.2.0</code>.
+ Комбинация переменной <em class=
+ "parameter"><code>DESTDIR</code></em> (в приведенной ниже
+ команде <span class="command"><strong>make
+ install</strong></span>) и этого аргумента обеспечивает
+ установку заголовочных файлов туда.
+ </p>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Скомпилируйте Libstdc++, выполнив:
+ </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>
+ Удалите архивные файлы libtool, поскольку они потенциально опасны
+ при кросс-компиляции:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la</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">Раздел&nbsp;8.29.2, «Содержимое
+ пакета GCC.»</a>
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="glibc.html" title="Glibc-2.40">Пред.</a>
+ <p>
+ Glibc-2.40
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="../chapter06/chapter06.html" title=
+ "Кросс-Компиляция временных инструментов">След.</a>
+ <p>
+ Кросс-Компиляция временных инструментов
+ </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>
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 &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.29.2. Содержимое пакета GCC">Раздел&nbsp;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>
diff --git a/lfs-12.2-sysv/chapter05/glibc.html b/lfs-12.2-sysv/chapter05/glibc.html
new file mode 100644
index 0000000..5b50dc2
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/glibc.html
@@ -0,0 +1,374 @@
+<!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.5. Glibc-2.40
+ </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="linux-headers.html" title=
+ "Заголовочные файлы Linux-6.10.5 API">Пред.</a>
+ <p>
+ Заголовочные файлы Linux-6.10.5 API
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-libstdc++.html" title=
+ "Libstdc++ из GCC-14.2.0">След.</a>
+ <p>
+ Libstdc++ из GCC-14.2.0
+ </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-glibc" name="ch-tools-glibc"></a>5.5. Glibc-2.40
+ </h1>
+ <div class="wrap" lang="ru" xml:lang="ru">
+ <div class="package" lang="ru" xml:lang="ru">
+ <p>
+ Пакет Glibc содержит основную библиотеку C. Эта библиотека
+ предоставляет основные процедуры для выделения памяти, поиска в
+ каталогах, открытия и закрытия файлов, чтения и записи файлов,
+ обработки строк, сопоставления с образцом, арифметики и так далее
+ </p>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Приблизительное время сборки:</strong>
+ <span class="segbody">1.3 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">828 MB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ 5.5.1. Установка пакета Glibc
+ </h2>
+ <p>
+ Во-первых, создайте символическую ссылку для соответствия
+ требованиям LSB. Кроме того, для совместимости с x86_64 создайте
+ символическую ссылку, необходимую для правильной работы загрузчика
+ динамической библиотеки:
+ </p>
+ <pre class="userinput"><kbd class="command">case $(uname -m) in
+ i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
+ ;;
+ x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
+ ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
+ ;;
+esac</kbd></pre>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Приведенная выше команда верна. Команда <span class=
+ "command"><strong>ln</strong></span> имеет несколько вариантов
+ синтаксиса, поэтому обязательно ознакомьтесь с <span class=
+ "command"><strong>info coreutils ln</strong></span> и <a class=
+ "ulink" href="https://man.archlinux.org/man/ln.1">ln(1)</a>,
+ прежде чем сообщать об ошибке.
+ </p>
+ </div>
+ <p>
+ Некоторые программы, использующие Glibc, применяют несовместимый с
+ FHS каталог <code class="filename">/var/db</code> для хранения
+ своих данных времени выполнения. Установите следующий патч, чтобы
+ такие программы хранили свои данные в местах, совместимых с FHS:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">patch -Np1 -i ../glibc-2.40-fhs-1.patch</kbd></pre>
+ <p>
+ В документации к Glibc рекомендуется собирать Glibc в отдельном
+ каталоге:
+ </p>
+ <pre class="userinput"><kbd class="command">mkdir -v build
+cd build</kbd></pre>
+ <p>
+ Убедитесь, что утилиты <span class=
+ "command"><strong>ldconfig</strong></span> and <span class=
+ "command"><strong>sln</strong></span> установлены в <code class=
+ "filename">/usr/sbin</code>:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">echo "rootsbindir=/usr/sbin" &gt; configparms</kbd></pre>
+ <p>
+ Затем подготовьте Glibc к компиляции:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">../configure \
+ --prefix=/usr \
+ --host=$LFS_TGT \
+ --build=$(../scripts/config.guess) \
+ --enable-kernel=4.19 \
+ --with-headers=$LFS/usr/include \
+ --disable-nscd \
+ libc_cv_slibdir=/usr/lib</kbd></pre>
+ <div class="variablelist">
+ <p class="title">
+ <strong>Значение параметров настройки:</strong>
+ </p>
+ <dl class="variablelist">
+ <dt>
+ <span class="term"><em class="parameter"><code>--host=$LFS_TGT,
+ --build=$(../scripts/config.guess)</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Комбинация этих опций указывает на то, что система сборки
+ Glibc настраивается на кросс-компиляцию с использованием
+ кросс-компоновщика и кросс-компилятора в <code class=
+ "filename">$LFS/tools</code>.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--enable-kernel=4.19</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр позволяет Glibc выполнять компиляцию библиотеки
+ с поддержкой ядра 4.19 и более поздних версий. Поддержка
+ более старых ядер не включена.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--with-headers=$LFS/usr/include</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот аргумент позволяет скомпилировать библиотеку с
+ заголовочными файлами, недавно установленными в каталоге
+ $LFS/usr/include, таким образом, пакету будет известно, какие
+ функции есть у ядра, чтобы оптимизировать себя.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>libc_cv_slibdir=/usr/lib</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот аргумент гарантирует, что библиотека будет установлена в
+ /usr/lib вместо стандартного /lib64 на 64-битных машинах.
+ </p>
+ </dd>
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>--disable-nscd</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Параметр отключает сборку демона кэша службы имен, который
+ больше не используется.
+ </p>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ На этом этапе может появиться следующее предупреждение:
+ </p>
+ <div class="blockquote">
+ <blockquote class="blockquote">
+ <pre class="screen"><code class=
+ "computeroutput">configure: WARNING:
+*** These auxiliary programs are missing or
+*** incompatible versions: msgfmt
+*** some features will be disabled.
+*** Check the INSTALL file for required versions.</code></pre>
+ </blockquote>
+ </div>
+ <p>
+ Отсутствующая или несовместимая программа <span class=
+ "command"><strong>msgfmt</strong></span>, как правило, безвредна.
+ <span class="command"><strong>msgfmt</strong></span> является
+ частью пакета Gettext, который должен предоставлять
+ хост-дистрибутив.
+ </p>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Поступали сообщения о том, что этот пакет может не
+ компилироваться при <span class="quote">«<span class=
+ "quote">параллельной сборке</span>»</span>. Если это произойдет,
+ повторно запустите команду make с параметром <code class=
+ "option">-j1</code>.
+ </p>
+ </div>
+ <p>
+ Скомпилируйте пакет:
+ </p>
+ <pre class="userinput"><kbd class="command">make</kbd></pre>
+ <p>
+ Установите пакет:
+ </p>
+ <div class="admon warning">
+ <img alt="[Предупреждение]" src="../images/warning.png" />
+ <h3>
+ Предупреждение
+ </h3>
+ <p>
+ Если переменная <code class="envar">LFS</code> настроена
+ неправильно, и, несмотря на рекомендации, вы выполняете сборку от
+ имени пользователя <code class="systemitem">root</code>,
+ следующая команда установит только что собранный Glibc в вашу
+ хост-систему, что, скорее всего, сделает её непригодной для
+ использования. Поэтому дважды проверьте, правильность настройки
+ среды и что вы вошли в систему не под учетной записью
+ <code class="systemitem">root</code>, прежде чем запускать
+ следующую команду.
+ </p>
+ </div>
+ <pre class="userinput"><kbd class=
+ "command">make DESTDIR=$LFS install</kbd></pre>
+ <div class="variablelist">
+ <p class="title">
+ <strong>Значение опции <span class="command"><strong>make
+ install</strong></span>:</strong>
+ </p>
+ <dl class="variablelist">
+ <dt>
+ <span class="term"><em class=
+ "parameter"><code>DESTDIR=$LFS</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Переменная make <code class="envar">DESTDIR</code>
+ используется почти всеми пакетами для определения места
+ установки пакета. Если она не задана, по умолчанию для
+ установки используется корневой каталог (<code class=
+ "filename">/</code>). Здесь мы указываем, что пакет должен
+ быть установлен в $LFS, который станет корневым каталогом в
+ <a class="xref" href="../chapter07/chroot.html" title=
+ "7.4. Вход в окружение Chroot">Раздел&nbsp;7.4, «Вход в
+ окружение Chroot»</a>.
+ </p>
+ </dd>
+ </dl>
+ </div>
+ <p>
+ Исправьте жестко запрограммированный путь к исполняемому загрузчику
+ в <span class="command"><strong>ldd</strong></span>:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</kbd></pre>
+ <div class="admon caution">
+ <img alt="[Внимание]" src="../images/caution.png" />
+ <h3>
+ Внимание
+ </h3>
+ <p>
+ На этом этапе необходимо остановиться и убедиться, что основные
+ функции (компиляция и компоновка) нового кросс-тулчейна работают
+ должным образом. Чтобы выполнить проверку работоспособности,
+ выполните следующие команды:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">echo 'int main(){}' | $LFS_TGT-gcc -xc -
+readelf -l a.out | grep ld-linux</kbd></pre>
+ <p>
+ Если все работает правильно, ошибок быть не должно и вывод
+ последней команды будет иметь вид:
+ </p>
+ <pre class="screen"><code class=
+ "computeroutput">[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</code></pre>
+ <p>
+ Обратите внимание, что для 32-разрядных машин имя интерпретатора
+ будет <code class="filename">/lib/ld-linux.so.2</code>.
+ </p>
+ <p>
+ Если выходные данные отображаются не так, как указано выше, или
+ их вообще нет, значит, что-то сделано неправильно. Разберитесь с
+ проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема
+ должна быть решена, прежде чем вы продолжите.
+ </p>
+ <p>
+ Как только все будет хорошо, удалите тестовый файл:
+ </p>
+ <pre class="userinput"><kbd class="command">rm -v a.out</kbd></pre>
+ </div>
+ <div class="admon note">
+ <img alt="[Примечание]" src="../images/note.png" />
+ <h3>
+ Примечание
+ </h3>
+ <p>
+ Сборка пакетов в следующей главе послужит дополнительной
+ проверкой правильности сборки временного кросс-тулчейна. Если
+ какой-либо пакет, особенно Binutils или GCC, не удается собрать,
+ это указывает на то, что что-то пошло не так с установленными
+ ранее Binutils, GCC, или Glibc.
+ </p>
+ </div>
+ </div>
+ <div class="content" lang="ru" xml:lang="ru">
+ <p>
+ Подробная информация об этом пакете находится в <a class="xref"
+ href="../chapter08/glibc.html#contents-glibc" title=
+ "8.5.3. Содержимое пакета Glibc">Раздел&nbsp;8.5.3, «Содержимое
+ пакета Glibc.»</a>
+ </p>
+ </div>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="linux-headers.html" title=
+ "Заголовочные файлы Linux-6.10.5 API">Пред.</a>
+ <p>
+ Заголовочные файлы Linux-6.10.5 API
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-libstdc++.html" title=
+ "Libstdc++ из GCC-14.2.0">След.</a>
+ <p>
+ Libstdc++ из GCC-14.2.0
+ </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>
diff --git a/lfs-12.2-sysv/chapter05/introduction.html b/lfs-12.2-sysv/chapter05/introduction.html
new file mode 100644
index 0000000..cd72263
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/introduction.html
@@ -0,0 +1,94 @@
+<!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.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="chapter05.html" title=
+ "Сборка кросс-тулчейна">Пред.</a>
+ <p>
+ Сборка кросс-тулчейна
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="binutils-pass1.html" title=
+ "Binutils-2.43.1 - Проход 1">След.</a>
+ <p>
+ Binutils-2.43.1 - Проход 1
+ </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-introduction" name="ch-tools-introduction"></a>5.1.
+ Введение
+ </h1>
+ <div class="sect1" lang="ru" xml:lang="ru">
+ <p>
+ В этой главе дано описание, как создать кросс-компилятор и связанные
+ с ним инструменты. Несмотря на то, что на данном этапе
+ кросс-компиляция имитируется, принципы его работы те же, что и для
+ настоящего кросс-тулчейна.
+ </p>
+ <p>
+ Программы, скомпилированные в этой главе, будут установлены в каталог
+ <code class="filename">$LFS/tools</code>, чтобы они были отделены от
+ файлов, установленных в следующих главах. Библиотеки, же,
+ устанавливаются на свое постоянное место, поскольку они относятся к
+ системе, которую мы хотим создать.
+ </p>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="chapter05.html" title=
+ "Сборка кросс-тулчейна">Пред.</a>
+ <p>
+ Сборка кросс-тулчейна
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="binutils-pass1.html" title=
+ "Binutils-2.43.1 - Проход 1">След.</a>
+ <p>
+ Binutils-2.43.1 - Проход 1
+ </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>
diff --git a/lfs-12.2-sysv/chapter05/linux-headers.html b/lfs-12.2-sysv/chapter05/linux-headers.html
new file mode 100644
index 0000000..a6f4570
--- /dev/null
+++ b/lfs-12.2-sysv/chapter05/linux-headers.html
@@ -0,0 +1,315 @@
+<!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.4. Заголовочные файлы Linux-6.10.5 API
+ </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="gcc-pass1.html" title=
+ "GCC-14.2.0 - Проход 1">Пред.</a>
+ <p>
+ GCC-14.2.0 - Проход 1
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="glibc.html" title="Glibc-2.40">След.</a>
+ <p>
+ Glibc-2.40
+ </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-linux-headers" name="ch-tools-linux-headers"></a>5.4.
+ Заголовочные файлы Linux-6.10.5 API
+ </h1>
+ <div class="wrap" lang="ru" xml:lang="ru">
+ <div class="package" lang="ru" xml:lang="ru">
+ <p>
+ Заголовочные файлы Linux API (в linux-6.10.5.tar.xz) предоставляют
+ API ядра для использования Glibc.
+ </p>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Приблизительное время сборки:</strong>
+ <span class="segbody">менее 0.1 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">1.6 GB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ 5.4.1. Установка заголовочных файлов
+ </h2>
+ <p>
+ Ядро Linux должно предоставлять интерфейс прикладного
+ программирования (API) для использования системной библиотекой C
+ (Glibc в LFS). Это делается путем установки заголовочных файлов C,
+ которые поставляются в архиве с исходным кодом ядра Linux.
+ </p>
+ <p>
+ Убедитесь, что в пакете нет устаревших файлов:
+ </p>
+ <pre class="userinput"><kbd class="command">make mrproper</kbd></pre>
+ <p>
+ Теперь извлеките видимые пользователю заголовочные файлы ядра из
+ исходного кода. Рекомендуемый способ make <span class=
+ "quote">«<span class="quote">headers_install</span>»</span>
+ использовать нельзя, так как для этого требуется <span class=
+ "application">rsync</span>, который может быть недоступен.
+ Заголовочные файлы сначала помещаются в <code class=
+ "filename">/usr</code>, а затем копируются в нужное место.
+ </p>
+ <pre class="userinput"><kbd class="command">make headers
+find usr/include -type f ! -name '*.h' -delete
+</kbd><kbd class="command">cp -rv usr/include $LFS/usr</kbd></pre>
+ </div>
+ <div class="content" lang="ru" xml:lang="ru">
+ <h2 class="sect2">
+ <a id="contents-linux-headers" name=
+ "contents-linux-headers"></a>5.4.2. Содержимое заголовочных файлов
+ Linux API
+ </h2>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Установленные заголовочные
+ файлы::</strong> <span class="segbody">/usr/include/asm/*.h,
+ /usr/include/asm-generic/*.h, /usr/include/drm/*.h,
+ /usr/include/linux/*.h, /usr/include/misc/*.h,
+ /usr/include/mtd/*.h, /usr/include/rdma/*.h,
+ /usr/include/scsi/*.h, /usr/include/sound/*.h,
+ /usr/include/video/*.h, and /usr/include/xen/*.h</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Созданные каталоги::</strong>
+ <span class="segbody">/usr/include/asm,
+ /usr/include/asm-generic, /usr/include/drm, /usr/include/linux,
+ /usr/include/misc, /usr/include/mtd, /usr/include/rdma,
+ /usr/include/scsi, /usr/include/sound, /usr/include/video, and
+ /usr/include/xen</span>
+ </div>
+ </div>
+ </div>
+ <div class="variablelist">
+ <h3>
+ Краткое описание
+ </h3>
+ <table border="0" class="variablelist">
+ <colgroup>
+ <col align="left" valign="top" />
+ <col />
+ </colgroup>
+ <tbody>
+ <tr>
+ <td>
+ <p>
+ <a id="asm" name="asm"></a><span class=
+ "term"><code class="filename">/usr/include/asm/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API ASM
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="asm-generic" name="asm-generic"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/asm-generic/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API ASM Generic
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="drm" name="drm"></a><span class=
+ "term"><code class="filename">/usr/include/drm/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API DRM
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="linux" name="linux"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/linux/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API Linux
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="misc" name="misc"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/misc/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API Miscellaneous
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="mtd" name="mtd"></a><span class=
+ "term"><code class="filename">/usr/include/mtd/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы API MTD
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="rdma" name="rdma"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/rdma/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API RDMA
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="scsi" name="scsi"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/scsi/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API SCSI
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="sound" name="sound"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/sound/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API Sound
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="video" name="video"></a><span class=
+ "term"><code class=
+ "filename">/usr/include/video/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API Video
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <a id="xen" name="xen"></a><span class=
+ "term"><code class="filename">/usr/include/xen/*.h</code></span>
+ </p>
+ </td>
+ <td>
+ <p>
+ Заголовочные файлы Linux API Xen
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <ul>
+ <li class="prev">
+ <a accesskey="p" href="gcc-pass1.html" title=
+ "GCC-14.2.0 - Проход 1">Пред.</a>
+ <p>
+ GCC-14.2.0 - Проход 1
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="glibc.html" title="Glibc-2.40">След.</a>
+ <p>
+ Glibc-2.40
+ </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>