diff options
author | Sn4il <sn4il@thedroth.rocks> | 2024-01-10 16:57:29 +0300 |
---|---|---|
committer | Sn4il <sn4il@thedroth.rocks> | 2024-01-10 16:57:29 +0300 |
commit | c4d43142181a45b849a15cf8ec5ebe61cea33897 (patch) | |
tree | 459a90d19e6f1ece81fbf364c1b5292214d99615 /lfs-12.0-sysv/chapter05/glibc.html | |
parent | a044ba7b1561a513e33de0b7c1876aaa401a26d7 (diff) | |
download | sn4il-site-c4d43142181a45b849a15cf8ec5ebe61cea33897.tar.gz sn4il-site-c4d43142181a45b849a15cf8ec5ebe61cea33897.zip |
LFS 12 mirror
Diffstat (limited to 'lfs-12.0-sysv/chapter05/glibc.html')
-rw-r--r-- | lfs-12.0-sysv/chapter05/glibc.html | 361 |
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" > 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">Раздел 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">Раздел 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> |