Инструменты пользователя

Инструменты сайта

  • Показать страницу
  • История страницы
  • Ссылки сюда
  • Оставить на чай
  • Экспорт в PDF
  • Наверх

  • software:linux_server:lfs-example:chapter05

    Различия

    Показаны различия между двумя версиями страницы.

    Ссылка на это сравнение

    Предыдущая версия справа и слеваПредыдущая версия
    Следующая версия
    Предыдущая версия
    software:linux_server:lfs-example:chapter05 [2024/07/14 20:16] – [5.3. GCC-13.2.0 - Проход 1] vladpolskiysoftware:linux_server:lfs-example:chapter05 [2024/07/15 01:22] (текущий) – [5.6.1. Установка библиотеки Libstdc++] vladpolskiy
    Строка 223: Строка 223:
     </code> </code>
     {{:software:linux_server:lfs-example:lfs_example_85.png?|}} {{:software:linux_server:lfs-example:lfs_example_85.png?|}}
     +выод окончания компиляции
     +{{:software:linux_server:lfs-example:lfs_example_86.png?|}}
     Установите пакет: Установите пакет:
     +{{:software:linux_server:lfs-example:lfs_example_87.png?|}}
     <code> <code>
     make install make install
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_88.png?|}}
     Во время сборки GCC установил пару внутренних системных заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные ограничения **limits.h**, в данном случае **$LFS/usr/include/limits.h.** Однако во время сборки **GCC $LFS/usr/include/limits.h** не существует, поэтому только что установленный внутренний заголовочный файл является частичным, автономным файлом и не включает расширенные функции системного файла. Этого достаточно для сборки Glibc, но полный внутренний заголовочный файл понадобится позже. Создайте полную версию внутреннего заголовочного файла с помощью команды, идентичной той, что система сборки GCC использует обычно: Во время сборки GCC установил пару внутренних системных заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные ограничения **limits.h**, в данном случае **$LFS/usr/include/limits.h.** Однако во время сборки **GCC $LFS/usr/include/limits.h** не существует, поэтому только что установленный внутренний заголовочный файл является частичным, автономным файлом и не включает расширенные функции системного файла. Этого достаточно для сборки Glibc, но полный внутренний заголовочный файл понадобится позже. Создайте полную версию внутреннего заголовочного файла с помощью команды, идентичной той, что система сборки GCC использует обычно:
      
    Строка 235: Строка 237:
     В приведенной ниже команде показан пример подстановки вложенных команд, используя два метода: обратные кавычки и конструкцию $(). Его можно было бы переписать, используя один и тот же метод для обеих замен, но сделано так, чтобы продемонстрировать, как их можно использовать одновременно. В целом метод $() предпочтительнее. В приведенной ниже команде показан пример подстановки вложенных команд, используя два метода: обратные кавычки и конструкцию $(). Его можно было бы переписать, используя один и тот же метод для обеих замен, но сделано так, чтобы продемонстрировать, как их можно использовать одновременно. В целом метод $() предпочтительнее.
     </WRAP> </WRAP>
     +Выйдем из каталога build
     <code> <code>
     cd .. cd ..
     +</code>
     +{{:software:linux_server:lfs-example:lfs_example_89.png?|}}
     +Создадим полную версию внутреннего заголовка с помощью команды
     +<code>
     cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
       `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_90.png?|}} 
     +Перейдем в каталог sources и удалим более не нужный разорхивированный каталог binutils-2.42 
     +<code> 
     +cd .. 
     +rm -Rf gcc-13.2.0 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_91.png?|}}
     Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.28.2. Содержимое пакета GCC|Разделе 8.28.2. «Содержимое пакета GCC.»]] Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.28.2. Содержимое пакета GCC|Разделе 8.28.2. «Содержимое пакета GCC.»]]
      
    Строка 250: Строка 262:
     |Требуемое дисковое пространство:|1.5 GB| |Требуемое дисковое пространство:|1.5 GB|
      
     +Распаковываем архив и переходим в каталог с его содержимым
     +<code>
     +tar -pxf linux-6.7.4.tar.xz
     +cd linux-6.7.4
     +</code>
     +{{:software:linux_server:lfs-example:lfs_example_92.png?|}}
     ====5.4.1. Установка заголовочных файлов==== ====5.4.1. Установка заголовочных файлов====
    - 
     Ядро Linux должно предоставлять интерфейс прикладного программирования (API) для использования системной библиотекой C (Glibc в LFS). Это делается путем установки заголовочных файлов C, которые поставляются в архиве с исходным кодом ядра Linux. Ядро Linux должно предоставлять интерфейс прикладного программирования (API) для использования системной библиотекой C (Glibc в LFS). Это делается путем установки заголовочных файлов C, которые поставляются в архиве с исходным кодом ядра Linux.
      
     Убедитесь, что в пакете нет устаревших файлов: Убедитесь, что в пакете нет устаревших файлов:
    - 
     <code> <code>
     make mrproper make mrproper
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_93.png?|}}
     Теперь извлеките видимые пользователю заголовочные файлы ядра из исходного кода. Рекомендуемый способ make «headers_install» использовать нельзя, так как для этого требуется rsync, который может быть недоступен. Заголовочные файлы сначала помещаются в /usr, а затем копируются в нужное место. Теперь извлеките видимые пользователю заголовочные файлы ядра из исходного кода. Рекомендуемый способ make «headers_install» использовать нельзя, так как для этого требуется rsync, который может быть недоступен. Заголовочные файлы сначала помещаются в /usr, а затем копируются в нужное место.
    - 
     <code> <code>
     make headers make headers
    Строка 267: Строка 282:
     cp -rv usr/include $LFS/usr cp -rv usr/include $LFS/usr
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_94.png?|}}
     ====5.4.2. Содержимое заголовочных файлов Linux API==== ====5.4.2. Содержимое заголовочных файлов Linux API====
      
    Строка 286: Строка 301:
     |/usr/include/video/*.h|Заголовочные файлы Linux API Video| |/usr/include/video/*.h|Заголовочные файлы Linux API Video|
     |/usr/include/xen/*.h|Заголовочные файлы Linux API Xen| |/usr/include/xen/*.h|Заголовочные файлы Linux API Xen|
     +Перейдем в каталог sources и удалим более не нужный разорхивированный каталог linux-6.7.4 
     +<code> 
     +cd .. 
     +rm -Rf linux-6.7.4 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_95.png?|}}
     =====5.5. Glibc-2.39===== =====5.5. Glibc-2.39=====
      
    Строка 293: Строка 313:
     |Требуемое дисковое пространство:|846 MB| |Требуемое дисковое пространство:|846 MB|
      
    -====5.5.1. Установка пакета Glibc==== +====5.5.1. Установка пакета Glibc-2.39==== 
     +Распакуем пакет glibc-2.39 и перейдем в распакованный каталог 
     +<code> 
     +tar -xvf glibc-2.39.tar.xz 
     +cd glibc-2.39 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_96.png?|}}
     Во-первых, создайте символическую ссылку для соответствия требованиям LSB. Кроме того, для совместимости с x86_64 создайте символическую ссылку, необходимую для правильной работы загрузчика динамической библиотеки: Во-первых, создайте символическую ссылку для соответствия требованиям LSB. Кроме того, для совместимости с x86_64 создайте символическую ссылку, необходимую для правильной работы загрузчика динамической библиотеки:
    - 
     <code> <code>
     case $(uname -m) in case $(uname -m) in
    Строка 306: Строка 330:
     esac esac
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_115.png?|}}
     <WRAP left round info 100%> <WRAP left round info 100%>
     **Примечание** \\   **Примечание** \\  
    Строка 317: Строка 341:
     patch -Np1 -i ../glibc-2.39-fhs-1.patch patch -Np1 -i ../glibc-2.39-fhs-1.patch
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_116.png?|}}
     В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге: В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге:
      
    Строка 324: Строка 348:
     cd       build cd       build
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_117.png?|}}
     Убедитесь, что утилиты ldconfig and sln установлены в /usr/sbin: Убедитесь, что утилиты ldconfig and sln установлены в /usr/sbin:
      
    Строка 330: Строка 354:
     echo "rootsbindir=/usr/sbin" > configparms echo "rootsbindir=/usr/sbin" > configparms
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_118.png?|}}
     Затем подготовьте Glibc к компиляции: Затем подготовьте Glibc к компиляции:
      
    Строка 344: Строка 368:
     </code> </code>
      
    -===Значение параметров настройки:===+<details> 
     +<summary>«**Значение параметров настройки:**»</summary>
      
       * **--host=$LFS_TGT, --build=$(../scripts/config.guess)**   * **--host=$LFS_TGT, --build=$(../scripts/config.guess)**
    Строка 360: Строка 385:
       * **--disable-nscd**   * **--disable-nscd**
     Параметр отключает сборку демона кэша службы имен, который больше не используется. Параметр отключает сборку демона кэша службы имен, который больше не используется.
     +</details> 
     +{{:software:linux_server:lfs-example:lfs_example_119.png?|}}
     На этом этапе может появиться следующее предупреждение: На этом этапе может появиться следующее предупреждение:
      
    Строка 375: Строка 401:
     <WRAP left round info 100%> <WRAP left round info 100%>
     **Примечание** \\   **Примечание** \\  
    -Поступали сообщения о том, что этот пакет может не компилироваться при «параллельной сборке». Если это произойдет, повторно запустите команду make с параметром -j1.+Поступали сообщения о том, что этот пакет может не компилироваться при «параллельной сборке». Если это произойдет, повторно запустите команду make с параметром **-j1**.
     </WRAP> </WRAP>
      
    Строка 381: Строка 407:
      
     <code> <code>
    -make+time make
     </code> </code>
    - +{{:software:linux_server:lfs-example:lfs_example_120.png?|}}
    -Установите пакет:+
      
     <WRAP left round alert 100%> <WRAP left round alert 100%>
    Строка 390: Строка 415:
     Если переменная LFS настроена неправильно, и, несмотря на рекомендации, вы выполняете сборку от имени пользователя root, следующая команда установит только что собранный Glibc в вашу хост-систему, что, скорее всего, сделает её непригодной для использования. Поэтому дважды проверьте, правильность настройки среды и что вы вошли в систему не под учетной записью root, прежде чем запускать следующую команду. Если переменная LFS настроена неправильно, и, несмотря на рекомендации, вы выполняете сборку от имени пользователя root, следующая команда установит только что собранный Glibc в вашу хост-систему, что, скорее всего, сделает её непригодной для использования. Поэтому дважды проверьте, правильность настройки среды и что вы вошли в систему не под учетной записью root, прежде чем запускать следующую команду.
     </WRAP> </WRAP>
     +выполним проверки 
     +<code> 
     +id 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_121.png?|}} 
     +<code> 
     +echo $LFS 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_122.png?|}} 
     +Установите пакет:
     <code> <code>
     make DESTDIR=$LFS install make DESTDIR=$LFS install
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_123.png?|}} 
     +Результат установки 
     +{{:software:linux_server:lfs-example:lfs_example_124.png?|}}
     ===Значение опции make install:=== ===Значение опции make install:===
      
    Строка 405: Строка 441:
     sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_125.png?|}}
     <WRAP left round important 100%> <WRAP left round important 100%>
     **Внимание** \\   **Внимание** \\  
    Строка 417: Строка 453:
     [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_126.png?|}}
     Обратите внимание, что для 32-разрядных машин имя интерпретатора будет /lib/ld-linux.so.2. Обратите внимание, что для 32-разрядных машин имя интерпретатора будет /lib/ld-linux.so.2.
      
    Строка 425: Строка 462:
     rm -v a.out rm -v a.out
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_127.png?|}}
     </WRAP> </WRAP>
      
    Строка 432: Строка 470:
     Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, это указывает на то, что что-то пошло не так с установленными ранее Binutils, GCC, или Glibc. Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, это указывает на то, что что-то пошло не так с установленными ранее Binutils, GCC, или Glibc.
     </WRAP> </WRAP>
     +Перейдем в каталог sources и удалим более не нужный разорхивированный каталог glibc-2.39 
     +<code> 
     +cd ../.. 
     +rm -Rf glibc-2.39 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_128.png?|}}
     Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.5.3. Содержимое пакета Glibc|Раздел 8.5.3. «Содержимое пакета Glibc.»]] Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.5.3. Содержимое пакета Glibc|Раздел 8.5.3. «Содержимое пакета Glibc.»]]
      
    Строка 447: Строка 490:
     Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в каталог gcc-13.2.0. Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в каталог gcc-13.2.0.
     </WRAP> </WRAP>
     +Распаковываем архив и переходим в каталог с его содержимым 
     +<code> 
     +tar -xvf gcc-13.2.0.tar.xz 
     +cd gcc-13.2.0 
     +</code> 
     +{{:software:linux_server:lfs-example:lfs_example_129.png?|}}
     Создайте отдельный каталог сборки для libstdc++ и перейдите в него: Создайте отдельный каталог сборки для libstdc++ и перейдите в него:
    - 
     <code> <code>
     mkdir -v build mkdir -v build
     cd       build cd       build
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_130.png?|}}
     Подготовьте libstdc++ к компиляции: Подготовьте libstdc++ к компиляции:
      
    Строка 467: Строка 514:
         --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0     --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0
     </code> </code>
    - +{{:software:linux_server:lfs-example:lfs_example_131.png?|}} 
    -===Значение параметров настройки:===+<details> 
     +<summary>«**Значение параметров настройки:**»</summary>
      
       * **--host=...**   * **--host=...**
    Строка 478: Строка 526:
       * **--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0**   * **--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/13.2.0**
     Указывает каталог установки для include-файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, в котором компилятор C++ ($LFS_TGT-g++) будет искать стандартные включаемые файлы C++. При обычной сборке эта информация автоматически передается в Libstdc++ при выполнении configure из каталога верхнего уровня. В нашем случае эта информация должна быть указана явно. Компилятор C++ добавит путь sysroot $LFS (указанный при сборке GCC Проход 1) к пути поиска include-файлов, поэтому фактически он будет искать в $LFS/tools/$LFS_TGT/include/c++/13.2.0. Комбинация переменной DESTDIR (в приведенной ниже команде make install) и этого аргумента обеспечивает установку заголовочных файлов туда. Указывает каталог установки для include-файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, в котором компилятор C++ ($LFS_TGT-g++) будет искать стандартные включаемые файлы C++. При обычной сборке эта информация автоматически передается в Libstdc++ при выполнении configure из каталога верхнего уровня. В нашем случае эта информация должна быть указана явно. Компилятор C++ добавит путь sysroot $LFS (указанный при сборке GCC Проход 1) к пути поиска include-файлов, поэтому фактически он будет искать в $LFS/tools/$LFS_TGT/include/c++/13.2.0. Комбинация переменной DESTDIR (в приведенной ниже команде make install) и этого аргумента обеспечивает установку заголовочных файлов туда.
     +</details>
     Скомпилируйте Libstdc++, выполнив: Скомпилируйте Libstdc++, выполнив:
     +{{:software:linux_server:lfs-example:lfs_example_132.png?|}}
     <code> <code>
    -make+time make
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_133.png?|}}
     Установите библиотеку: Установите библиотеку:
     +{{:software:linux_server:lfs-example:lfs_example_134.png?|}}
     <code> <code>
     make DESTDIR=$LFS install make DESTDIR=$LFS install
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_135.png?|}}
     Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции: Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции:
      
    Строка 496: Строка 544:
     rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la
     </code> </code>
     +{{:software:linux_server:lfs-example:lfs_example_136.png?|}} 
     +Перейдем в каталог sources и удалим более не нужный разорхивированный каталог binutils-2.42 
     +<code> 
     +cd ../.. 
     +rm -Rf gcc-13.2.0 
     +</code>
     Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.28.2. Содержимое пакета GCC|Разделе 8.28.2. «Содержимое пакета GCC.»]] Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.28.2. Содержимое пакета GCC|Разделе 8.28.2. «Содержимое пакета GCC.»]]
     +  * [[software:linux_server:lfs-example:chapter06|]]
    software/linux_server/lfs-example/chapter05.1720977402.txt.gz · Последнее изменение: 2024/07/14 20:16 — vladpolskiy