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

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

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

  • software:linux_server:lfs:chapter06

    Различия

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

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

    Предыдущая версия справа и слеваПредыдущая версия
    Следующая версия
    Предыдущая версия
    software:linux_server:lfs:chapter06 [2024/07/02 09:52] – [6.12. Make-4.4.1] vladpolskiysoftware:linux_server:lfs:chapter06 [2024/07/02 12:37] (текущий) – [6. Кросс-Компиляция временных инструментов] vladpolskiy
    Строка 1: Строка 1:
    -======6. Кросс-Компиляция временных инструментов======+======Часть III. Глава 6. Кросс-Компиляция временных инструментов======
     Содержание Содержание
       * [[software:linux_server:lfs:chapter06#6.1. Введение|6.1. Введение]]   * [[software:linux_server:lfs:chapter06#6.1. Введение|6.1. Введение]]
    Строка 508: Строка 508:
      
     =====6.13. Patch-2.7.6===== =====6.13. Patch-2.7.6=====
     +
     +|Пакет Patch содержит программу для изменения или создания файлов путём наложение «патча», обычно, создаваемого программой diff.||
     +|Приблизительное время сборки:|0.1 SBU|
     +|Требуемое дисковое пространство:|12 MB|
     +
     +====6.13.1. Установка пакета Patch====
     +
     +Подготовьте Patch к компиляции:
     +
     +<code>
     +./configure --prefix=/usr   \
     +            --host=$LFS_TGT \
     +            --build=$(build-aux/config.guess)
     +</code>
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.69.2. Содержимое пакета Patch|Разделе 8.69.2. «Содержимое пакета Patch.»]]
     +
     =====6.14. Sed-4.9===== =====6.14. Sed-4.9=====
     +
     +|Пакет Sed содержит потоковый редактор текста||
     +|Приблизительное время сборки:|0.1 SBU|
     +|Требуемое дисковое пространство:|21 MB|
     +
     +====6.14.1. Установка пакета Sed====
     +
     +Подготовьте Sed к компиляции:
     +
     +<code>
     +./configure --prefix=/usr   \
     +            --host=$LFS_TGT \
     +            --build=$(./build-aux/config.guess)
     +</code>
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.30.2. Содержимое пакета Sed|Разделе 8.30.2. «Содержимое пакета Sed.»]]
     =====6.15. Tar-1.35===== =====6.15. Tar-1.35=====
     +
     +|Пакет Tar предоставляет возможность создавать tar архивы, а также производить с ними различные манипуляции. Tar может распаковать предварительно созданный архив, добавить или обновить файлы в нём, вернуть список файлов в архиве.||
     +|Приблизительное время сборки:|0.1 SBU|
     +|Требуемое дисковое пространство:|42 MB|
     +
     +====6.15.1. Установка пакета Tar====
     +
     +Подготовьте Tar к компиляции:
     +
     +<code>
     +./configure --prefix=/usr                     \
     +            --host=$LFS_TGT                   \
     +            --build=$(build-aux/config.guess)
     +</code>
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.70.2. Содержимое пакета Tar|Разделе 8.70.2. «Содержимое пакета Tar.»]]
     =====6.16. Xz-5.4.6===== =====6.16. Xz-5.4.6=====
     +
     +|Пакет Xz содержит программы для сжатия и распаковки файлов. Он предоставляет возможности для lzma и более новых форматов сжатия xz. Сжатие текстовых файлов с помощью xz дает лучший процент сжатия, чем с традиционные gzip или bzip2.||
     +|Приблизительное время сборки:|0.1 SBU|
     +|Требуемое дисковое пространство:|22 MB|
     +
     +====6.16.1. Установка пакета Xz====
     +
     +Подготовьте Xz к компиляции:
     +
     +<code>
     +./configure --prefix=/usr                     \
     +            --host=$LFS_TGT                   \
     +            --build=$(build-aux/config.guess) \
     +            --disable-static                  \
     +            --docdir=/usr/share/doc/xz-5.4.6
     +</code>
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +Удалите архивный файл libtool, поскольку он потенциально опасен при кросс-компиляции:
     +
     +<code>
     +rm -v $LFS/usr/lib/liblzma.la
     +</code>
     +
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.8.2. Содержимое пакета Xz|Разделе 8.8.2. «Содержимое пакета Xz.»]]
     =====6.17. Binutils-2.42 - Проход 2===== =====6.17. Binutils-2.42 - Проход 2=====
     +
     +|Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами.||
     +|Приблизительное время сборки:|0.5 SBU|
     +|Требуемое дисковое пространство:|537 MB|
     +
     +====6.17.1. Установка пакета Binutils====
     +
     +Система сборки Binutils использует содержащуюся в пакете копию libtool для линковки с внутренними статическими библиотеками, но копии libiberty и zlib, поставляемые с пакетом, не используют libtool. Это несоответствие может привести к тому, что созданные двоичные файлы будут ошибочно связаны с библиотеками из основного дистрибутива. Решение этой проблемы:
     +
     +<code>
     +sed '6009s/$add_dir//' -i ltmain.sh
     +</code>
     +
     +Создайте отдельный каталог для сборки:
     +
     +<code>
     +mkdir -v build
     +cd       build
     +</code>
     +
     +Подготовьте Binutils к компиляции:
     +
     +<code>
     +../configure                   \
     +    --prefix=/usr              \
     +    --build=$(../config.guess) \
     +    --host=$LFS_TGT            \
     +    --disable-nls              \
     +    --enable-shared            \
     +    --enable-gprofng=no        \
     +    --disable-werror           \
     +    --enable-64-bit-bfd        \
     +    --enable-default-hash-style=gnu
     +</code>
     +
     +===Значение новых параметров настройки:===
     +
     +  * **--enable-shared**
     +Собирает libbfd как разделяемую библиотеку
     +
     +  * **--enable-64-bit-bfd**
     +Включает 64-разрядную поддержку (на хостах с меньшим размером слова). В 64-разрядных системах это может и не понадобиться, но вреда от этого не будет
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции, также удалите ненужные статические библиотеки
     +
     +<code>
     +rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes,sframe}.{a,la}
     +</code>
     +
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.19.2. Содержимое пакета Binutils|Разделе 8.19.2. «Содержимое пакета Binutils.»]]
     +
     +
     =====6.18. GCC-13.2.0 - Проход 2===== =====6.18. GCC-13.2.0 - Проход 2=====
      
     +|Пакет GCC содержит коллекцию компиляторов GNU, которая включает компиляторы C и C++.||
     +|Приблизительное время сборки:|4.4 SBU|
     +|Требуемое дисковое пространство:|4.8 GB|
      
     +====6.18.1. Установка пакета GCC====
      
     +Как и при первой сборке GCC, требуются пакеты GMP, MPFR и MPC. Распакуйте архивы и переименуйте каталоги:
     +
     +<code>
     +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
     +</code>
     +
     +При сборке на x86_64 измените имя каталога по умолчанию для 64-разрядных библиотек на «lib»:
     +
     +<code>
     +case $(uname -m) in
     +  x86_64)
     +    sed -e '/m64=/s/lib64/lib/' \
     +        -i.orig gcc/config/i386/t-linux64
     +  ;;
     +esac
     +</code>
     +
     +Переопределите правила сборки заголовочных файлов libgcc и libstdc++, чтобы разрешить создание этих библиотек с поддержкой потоков POSIX:
     +
     +<code>
     +sed '/thread_header =/s/@.*@/gthr-posix.h/' \
     +    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
     +</code>
     +
     +Снова создайте отдельный каталог сборки:
     +
     +<code>
     +mkdir -v build
     +cd       build
     +</code>
     +
     +Перед началом сборки GCC не забудьте отключить все переменные среды, которые переопределяют флаги оптимизации по умолчанию.
     +
     +Теперь подготовьте GCC к компиляции:
     +
     +<code>
     +../configure                                       \
     +    --build=$(../config.guess)                     \
     +    --host=$LFS_TGT                                \
     +    --target=$LFS_TGT                              \
     +    LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc      \
     +    --prefix=/usr                                  \
     +    --with-build-sysroot=$LFS                      \
     +    --enable-default-pie                           \
     +    --enable-default-ssp                           \
     +    --disable-nls                                  \
     +    --disable-multilib                             \
     +    --disable-libatomic                            \
     +    --disable-libgomp                              \
     +    --disable-libquadmath                          \
     +    --disable-libsanitizer                         \
     +    --disable-libssp                               \
     +    --disable-libvtv                               \
     +    --enable-languages=c,c++
     +</code>
     +
     +===Значение новых параметров настройки:===
     +
     +  * **--with-build-sysroot=$LFS**
     +Обычно, использование --host гарантирует, что для сборки GCC используется кросс-компилятор, и этот компилятор знает, что он должен искать заголовочные файлы и библиотеки в $LFS. Но сборочная система GCC использует другие инструменты, которые не знают об этом местоположении. Этот параметр необходим для того, чтобы они могли найти нужные файлы в $LFS, а не на хосте.
     +
     +  * **--target=$LFS_TGT**
     +Поскольку мы выполняем кросс-компиляцию GCC, невозможно создать целевые библиотеки (libgcc и libstdc++) с ранее скомпилированными двоичными файлами GCC, потому что эти двоичные файлы не будут работать на хост-дистрибутиве. Система сборки GCC по умолчанию попытается использовать компиляторы C и C++ хоста в качестве обходного пути. Сейчас не поддерживается создание целевых библиотек GCC с помощью другой версии GCC, поэтому использование компиляторов хоста может привести к сбою сборки. Этот параметр гарантирует сборку библиотек с помощью GCC собранного на первом проходе.
     +
     +  * **LDFLAGS_FOR_TARGET=...**
     +Разрешить libstdc++ использовать общую библиотеку libgcc, собранную на этом этапе, вместо статической версии, собранной в GCC Проход 1. Это необходимо для поддержки обработки исключений C++
     +
     +  * **--disable-libsanitizer**
     +Отключает библиотеки среды выполнения GCC sanitizer. Они не нужны для временного набора инструментов. Этот параметр необходим для сборки GCC без установки libcrypt для целевого объекта. В GCC-Проход 1 это решалось с помощью параметра --disable-libstdcxx, но теперь мы должны передать его явно.
     +
     +Скомпилируйте пакет:
     +
     +<code>
     +make
     +</code>
     +
     +Установите пакет:
     +
     +<code>
     +make DESTDIR=$LFS install
     +</code>
     +
     +В качестве завершающего штриха создайте символическую ссылку на утилиту. Многие программы и скрипты используют cc вместо gcc, чтобы сделать программы более универсальными и, следовательно, для совместимости со всеми типами UNIX-систем, где компилятор GNU C не всегда установлен. Наличие cc оставляет системному администратору право самостоятельно решать, какой компилятор C устанавливать:
     +
     +<code>
     +ln -sv gcc $LFS/usr/bin/cc
     +</code>
      
     +Подробная информация об этом пакете находится в [[software:linux_server:lfs:chapter08#8.28.2. Содержимое пакета GCC|Разделе 8.28.2. «Содержимое пакета GCC.»]]
      
    software/linux_server/lfs/chapter06.1719903153.txt.gz · Последнее изменение: 2024/07/02 09:52 — vladpolskiy