software:linux_server:iso_lfs_server:iso_lfs_server
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| software:linux_server:iso_lfs_server:iso_lfs_server [2026/05/14 01:35] – [Запуск компиляции (День 4)] VladPolskiy | software:linux_server:iso_lfs_server:iso_lfs_server [2026/05/14 20:18] (текущий) – [День 4: Кросс-компилятор (Глава 5 LFS).] VladPolskiy | ||
|---|---|---|---|
| Строка 2208: | Строка 2208: | ||
| * Собирается полноценная разделяемая библиотека libstdc++ [12.1]. | * Собирается полноценная разделяемая библиотека libstdc++ [12.1]. | ||
| * Итоговые исполняемые файлы прописываются в каталог / | * Итоговые исполняемые файлы прописываются в каталог / | ||
| + | <note shadow> | ||
| + | {{: | ||
| + | </ | ||
| + | На скриншоте зафиксирована классическая ошибка компиляции GCC версии 13 на современных дистрибутивах хост-систем: | ||
| + | ==🔍 В чем причина ошибки== | ||
| + | Компилятор хоста Ubuntu задействует новые, более строгие правила статического анализа кода [12.1]. Он обнаружил потенциальную проблему, | ||
| + | \\ | ||
| + | Поскольку эта внутренняя библиотека отладки (libsanitizer) не критична для работы базового кросс-компилятора временной среды, а книга LFS 12.1 рекомендует полностью подавлять такие ошибки компилятора хоста [12.1], мы решим этот вопрос радикально и надежно. Мы передадим флаг отключения санитайзеров --disable-libsanitizer на этапе конфигурации GCC Pass 2 [12.1]. | ||
| + | ====🛠️ Модификация скрипта packages/ | ||
| + | Выполните команду в терминале хоста для полной перезаписи сценария. В конфигуратор добавлен официальный флаг обхода проблемных отладочных библиотек: | ||
| + | <code bash #bash> | ||
| + | cat << ' | ||
| + | #!/bin/bash | ||
| + | set -e | ||
| - | ====== День | + | # Очищаем переменные хоста, чтобы они не ломали кросс-компиляцию |
| + | unset CFLAGS | ||
| + | unset CXXFLAGS | ||
| + | |||
| + | # Распаковываем математические библиотеки внутрь корня GCC | ||
| + | tar -xf ../ | ||
| + | tar -xf ../ | ||
| + | tar -xf ../ | ||
| + | |||
| + | # Настройка динамического линкера под x86_64 | ||
| + | case $(uname -m) in | ||
| + | x86_64) | ||
| + | sed -e '/ | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | # Отключаем устаревший макрос Dialogue, если он присутствует | ||
| + | sed '/ | ||
| + | |||
| + | mkdir -v build | ||
| + | cd | ||
| + | |||
| + | # Предотвращаем конфликты сборки лимитов libstdc++ | ||
| + | mkdir -pv $LFS_TGT/ | ||
| + | |||
| + | # --disable-libsanitizer отключает проблемный модуль отладки памяти | ||
| + | # --disable-werror гарантирует, | ||
| + | ../ | ||
| + | --build=$(../ | ||
| + | --host=$LFS_TGT \ | ||
| + | --target=$LFS_TGT \ | ||
| + | --prefix=/ | ||
| + | --with-glibc-version=2.39 \ | ||
| + | --with-sysroot=$LFS \ | ||
| + | --enable-languages=c, | ||
| + | --enable-default-pie \ | ||
| + | --enable-default-ssp \ | ||
| + | --disable-nls \ | ||
| + | --disable-multilib \ | ||
| + | --disable-libsanitizer \ | ||
| + | --disable-werror | ||
| + | |||
| + | make $MAKEFLAGS | ||
| + | make DESTDIR=$LFS install | ||
| + | |||
| + | # Создаем критически важную ссылку на cc, чтобы chroot-среда видела компилятор по умолчанию | ||
| + | ln -sfv gcc $LFS/ | ||
| + | EOF | ||
| + | |||
| + | chmod +x ~/ | ||
| + | </ | ||
| + | ===🚀 Повторный запуск компиляции=== | ||
| + | Так как при падении важный экспорт переменной PATH мог сброситься в текущей сессии вашего терминала, | ||
| + | <code bash #bash> | ||
| + | cd ~/ | ||
| + | export PATH=$LFS/ | ||
| + | ./ | ||
| + | </ | ||
| + | Теперь компилятор хоста полностью пропустит сборку проблемной библиотеки libsanitizer, | ||
| + | \\ | ||
| + | |||
| + | ====== День | ||
| + | | ||
| + | ==================================================================== | ||
| + | =====🔑 ПЛАН НА ДЕНЬ 6: ИЗОЛЯЦИЯ И ПОДГОТОВКА CHROOT | ||
| + | Сегодня мы полностью разрываем связь с хост-системой Ubuntu. Все дальнейшие действия происходят внутри изолированной chroot-среды, | ||
| + | |||
| + | ==== 🛠️ Создание и запуск скрипта scripts/ | ||
| + | Выполните эту команду в терминале от пользователя eva. Она запишет файл, выдаст права на исполнение и сразу запустит процесс входа: | ||
| + | Используйте код с осторожностью.Шаг 2. Вход в изолированную chroot-среду: | ||
| + | ./ | ||
| + | Используйте код с осторожностью.Ваш терминал изменит вид на: (lfs chroot) root:/#. С этого момента вы находитесь внутри своего собственного Linux-сервера [12.1].Шаг 3. Создание базовой структуры и конфигурации (Глава 7 LFS): | ||
| ===== Написание скриптов для Binutils (Pass 1) и GCC (Pass 1). ===== | ===== Написание скриптов для Binutils (Pass 1) и GCC (Pass 1). ===== | ||
| ===== Запуск и отладка. Это самые долгие компиляции. ===== | ===== Запуск и отладка. Это самые долгие компиляции. ===== | ||
| ====== День 5: Завершение временных инструментов (Глава 6). ====== | ====== День 5: Завершение временных инструментов (Глава 6). ====== | ||
| ===== Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке. ===== | ===== Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке. ===== | ||
software/linux_server/iso_lfs_server/iso_lfs_server.1778711725.txt.gz · Последнее изменение: — VladPolskiy
