software:linux_server:lfs:chapter05
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
software:linux_server:lfs:chapter05 [2024/07/02 00:11] – создано vladpolskiy | software:linux_server:lfs:chapter05 [2024/07/02 12:36] (текущий) – [5. Сборка кросс-тулчейна] vladpolskiy | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ======5. | + | ======Часть III. Глава |
Содержание | Содержание | ||
* [[software: | * [[software: | ||
Строка 204: | Строка 204: | ||
=====5.4. Заголовочные файлы Linux-6.7.4 API===== | =====5.4. Заголовочные файлы Linux-6.7.4 API===== | ||
+ | |||
+ | |Заголовочные файлы Linux API (в linux-6.7.4.tar.xz) предоставляют API ядра для использования Glibc.|| | ||
+ | |Приблизительное время сборки: | ||
+ | |Требуемое дисковое пространство: | ||
+ | |||
+ | ====5.4.1. Установка заголовочных файлов==== | ||
+ | |||
+ | Ядро Linux должно предоставлять интерфейс прикладного программирования (API) для использования системной библиотекой C (Glibc в LFS). Это делается путем установки заголовочных файлов C, которые поставляются в архиве с исходным кодом ядра Linux. | ||
+ | |||
+ | Убедитесь, | ||
+ | |||
+ | < | ||
+ | make mrproper | ||
+ | </ | ||
+ | |||
+ | Теперь извлеките видимые пользователю заголовочные файлы ядра из исходного кода. Рекомендуемый способ make «headers_install» использовать нельзя, | ||
+ | |||
+ | < | ||
+ | make headers | ||
+ | find usr/include -type f ! -name ' | ||
+ | cp -rv usr/include $LFS/usr | ||
+ | </ | ||
+ | |||
+ | ====5.4.2. Содержимое заголовочных файлов Linux API==== | ||
+ | |||
+ | |**Установленные заголовочные файлы: | ||
+ | |**Созданные каталоги: | ||
+ | |||
+ | ===Краткое описание=== | ||
+ | |||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |/ | ||
+ | |||
+ | =====5.5. Glibc-2.39===== | ||
+ | |||
+ | |Пакет Glibc содержит основную библиотеку C. Эта библиотека предоставляет основные процедуры для выделения памяти, | ||
+ | |Приблизительное время сборки: | ||
+ | |Требуемое дисковое пространство: | ||
+ | |||
+ | ====5.5.1. Установка пакета Glibc==== | ||
+ | |||
+ | Во-первых, | ||
+ | |||
+ | < | ||
+ | case $(uname -m) in | ||
+ | i?86) ln -sfv ld-linux.so.2 $LFS/ | ||
+ | ;; | ||
+ | x86_64) ln -sfv ../ | ||
+ | ln -sfv ../ | ||
+ | ;; | ||
+ | esac | ||
+ | </ | ||
+ | |||
+ | <WRAP left round info 100%> | ||
+ | **Примечание** \\ | ||
+ | Приведенная выше команда верна. Команда ln имеет несколько вариантов синтаксиса, | ||
+ | </ | ||
+ | |||
+ | Некоторые программы, | ||
+ | |||
+ | < | ||
+ | patch -Np1 -i ../ | ||
+ | </ | ||
+ | |||
+ | В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге: | ||
+ | |||
+ | < | ||
+ | mkdir -v build | ||
+ | cd build | ||
+ | </ | ||
+ | |||
+ | Убедитесь, | ||
+ | |||
+ | < | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | Затем подготовьте Glibc к компиляции: | ||
+ | |||
+ | < | ||
+ | ../ | ||
+ | --prefix=/ | ||
+ | --host=$LFS_TGT | ||
+ | --build=$(../ | ||
+ | --enable-kernel=4.19 | ||
+ | --with-headers=$LFS/ | ||
+ | --disable-nscd | ||
+ | libc_cv_slibdir=/ | ||
+ | </ | ||
+ | |||
+ | ===Значение параметров настройки: | ||
+ | |||
+ | * **--host=$LFS_TGT, | ||
+ | Комбинация этих опций указывает на то, что система сборки Glibc настраивается на кросс-компиляцию с использованием кросс-компоновщика и кросс-компилятора в $LFS/tools. | ||
+ | |||
+ | * **--enable-kernel=4.19** | ||
+ | Этот параметр позволяет Glibc выполнять компиляцию библиотеки с поддержкой ядра 4.19 и более поздних версий. Поддержка более старых ядер не включена. | ||
+ | |||
+ | * **--with-headers=$LFS/ | ||
+ | Этот аргумент позволяет скомпилировать библиотеку с заголовочными файлами, | ||
+ | |||
+ | * **libc_cv_slibdir=/ | ||
+ | Этот аргумент гарантирует, | ||
+ | |||
+ | * **--disable-nscd** | ||
+ | Параметр отключает сборку демона кэша службы имен, который больше не используется. | ||
+ | |||
+ | На этом этапе может появиться следующее предупреждение: | ||
+ | |||
+ | < | ||
+ | configure: WARNING: | ||
+ | *** These auxiliary programs are missing or | ||
+ | *** incompatible versions: msgfmt | ||
+ | *** some features will be disabled. | ||
+ | *** Check the INSTALL file for required versions. | ||
+ | </ | ||
+ | |||
+ | Отсутствующая или несовместимая программа msgfmt, как правило, | ||
+ | |||
+ | <WRAP left round info 100%> | ||
+ | **Примечание** \\ | ||
+ | Поступали сообщения о том, что этот пакет может не компилироваться при «параллельной сборке». Если это произойдет, | ||
+ | </ | ||
+ | |||
+ | Скомпилируйте пакет: | ||
+ | |||
+ | < | ||
+ | make | ||
+ | </ | ||
+ | |||
+ | Установите пакет: | ||
+ | |||
+ | <WRAP left round alert 100%> | ||
+ | **Важно** \\ | ||
+ | Если переменная LFS настроена неправильно, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | make DESTDIR=$LFS install | ||
+ | </ | ||
+ | |||
+ | ===Значение опции make install:=== | ||
+ | |||
+ | * **DESTDIR=$LFS** | ||
+ | Переменная make DESTDIR используется почти всеми пакетами для определения места установки пакета. Если она не задана, | ||
+ | |||
+ | Исправьте жестко запрограммированный путь к исполняемому загрузчику в ldd: | ||
+ | |||
+ | < | ||
+ | sed '/ | ||
+ | </ | ||
+ | |||
+ | <WRAP left round important 100%> | ||
+ | **Внимание** \\ | ||
+ | На этом этапе необходимо остановиться и убедиться, | ||
+ | < | ||
+ | echo 'int main(){}' | ||
+ | readelf -l a.out | grep ld-linux | ||
+ | </ | ||
+ | Если все работает правильно, | ||
+ | < | ||
+ | [Requesting program interpreter: | ||
+ | </ | ||
+ | Обратите внимание, | ||
+ | |||
+ | Если выходные данные отображаются не так, как указано выше, или их вообще нет, значит, | ||
+ | |||
+ | Как только все будет хорошо, | ||
+ | < | ||
+ | rm -v a.out | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP left round info 100%> | ||
+ | **Примечание** \\ | ||
+ | Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, | ||
+ | </ | ||
+ | |||
+ | Подробная информация об этом пакете находится в [[software: | ||
+ | |||
+ | =====5.6. Libstdc++ из GCC-13.2.0===== | ||
+ | |||
+ | |Libstdc++ — это стандартная библиотека C++. Она нужна для компиляции кода C++ (часть GCC написана на C++), когда мы собирали [[software: | ||
+ | |Приблизительное время сборки: | ||
+ | |Требуемое дисковое пространство: | ||
+ | |||
+ | ====5.6.1. Установка библиотеки Libstdc++==== | ||
+ | |||
+ | <WRAP left round info 100%> | ||
+ | **Примечание** \\ | ||
+ | Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в каталог gcc-13.2.0. | ||
+ | </ | ||
+ | |||
+ | Создайте отдельный каталог сборки для libstdc++ и перейдите в него: | ||
+ | |||
+ | < | ||
+ | mkdir -v build | ||
+ | cd build | ||
+ | </ | ||
+ | |||
+ | Подготовьте libstdc++ к компиляции: | ||
+ | |||
+ | < | ||
+ | ../ | ||
+ | --host=$LFS_TGT | ||
+ | --build=$(../ | ||
+ | --prefix=/ | ||
+ | --disable-multilib | ||
+ | --disable-nls | ||
+ | --disable-libstdcxx-pch | ||
+ | --with-gxx-include-dir=/ | ||
+ | </ | ||
+ | |||
+ | ===Значение параметров настройки: | ||
+ | |||
+ | * **--host=...** | ||
+ | Указывает, | ||
+ | |||
+ | * **--disable-libstdcxx-pch** | ||
+ | Этот аргумент предотвращает установку предварительно скомпилированных include-файлов, | ||
+ | |||
+ | * **--with-gxx-include-dir=/ | ||
+ | Указывает каталог установки для include-файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, | ||
+ | |||
+ | Скомпилируйте Libstdc++, выполнив: | ||
+ | |||
+ | < | ||
+ | make | ||
+ | </ | ||
+ | |||
+ | Установите библиотеку: | ||
+ | |||
+ | < | ||
+ | make DESTDIR=$LFS install | ||
+ | </ | ||
+ | |||
+ | Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции: | ||
+ | |||
+ | < | ||
+ | rm -v $LFS/ | ||
+ | </ | ||
+ | |||
+ | Подробная информация об этом пакете находится в [[software: |
software/linux_server/lfs/chapter05.1719868298.txt.gz · Последнее изменение: 2024/07/02 00:11 — vladpolskiy