summaryrefslogtreecommitdiff
path: root/lfs-12.0-sysv/chapter05/glibc.html
diff options
context:
space:
mode:
Diffstat (limited to 'lfs-12.0-sysv/chapter05/glibc.html')
-rw-r--r--lfs-12.0-sysv/chapter05/glibc.html361
1 files changed, 361 insertions, 0 deletions
diff --git a/lfs-12.0-sysv/chapter05/glibc.html b/lfs-12.0-sysv/chapter05/glibc.html
new file mode 100644
index 0000000..fbfc139
--- /dev/null
+++ b/lfs-12.0-sysv/chapter05/glibc.html
@@ -0,0 +1,361 @@
+<!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.38
+ </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="linux-headers.html" title=
+ "Заголовочные файлы Linux-6.4.12 API">Пред.</a>
+ <p>
+ Заголовочные файлы Linux-6.4.12 API
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-libstdc++.html" title=
+ "Libstdc++ из GCC-13.2.0">След.</a>
+ <p>
+ Libstdc++ из GCC-13.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.0">Начало</a>
+ </li>
+ </ul>
+ </div>
+ <div class="wrap" lang="en" xml:lang="en">
+ <h1 class="sect1">
+ <a id="ch-tools-glibc" name="ch-tools-glibc"></a>5.5. Glibc-2.38
+ </h1>
+ <div class="package" lang="en" xml:lang="en">
+ <p>
+ Пакет Glibc содержит основную библиотеку C. Эта библиотека
+ предоставляет основные процедуры для выделения памяти, поиска в
+ каталогах, открытия и закрытия файлов, чтения и записи файлов,
+ обработки строк, сопоставления с образцом, арифметики и так далее
+ </p>
+ <div class="segmentedlist">
+ <div class="seglistitem">
+ <div class="seg">
+ <strong class="segtitle">Приблизительное время сборки:</strong>
+ <span class="segbody">1.6 SBU</span>
+ </div>
+ <div class="seg">
+ <strong class="segtitle">Требуемое дисковое
+ пространство:</strong> <span class="segbody">858 MB</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="installation" lang="en" xml:lang="en">
+ <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> и
+ <code class="filename">ln(1)</code>, прежде чем сообщать об
+ ошибке.
+ </p>
+ </div>
+ <p>
+ Некоторые программы, использующие Glibc, применяют несовместимый с
+ FHS каталог <code class="filename">/var/db</code> для хранения
+ своих данных времени выполнения. Установите следующий патч, чтобы
+ такие программы хранили свои данные в местах, совместимых с FHS:
+ </p>
+ <pre class="userinput"><kbd class=
+ "command">patch -Np1 -i ../glibc-2.38-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.14 \
+ --with-headers=$LFS/usr/include \
+ 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.14</code></em></span>
+ </dt>
+ <dd>
+ <p>
+ Этот параметр позволяет Glibc выполнять компиляцию библиотеки
+ с поддержкой ядра 4.14 и более поздних версий. Поддержка
+ более старых ядер не включена.
+ </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>
+ </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>
+ Поступали сообщения о том, что этот пакет может не
+ компилироваться при "параллельной сборке". Если это произойдет,
+ повторно запустите команду make с параметром "-j1".
+ </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="en" xml:lang="en">
+ <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.4.12 API">Пред.</a>
+ <p>
+ Заголовочные файлы Linux-6.4.12 API
+ </p>
+ </li>
+ <li class="next">
+ <a accesskey="n" href="gcc-libstdc++.html" title=
+ "Libstdc++ из GCC-13.2.0">След.</a>
+ <p>
+ Libstdc++ из GCC-13.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.0">Начало</a>
+ </li>
+ </ul>
+ </div>
+ </body>
+</html>