software:linux_server:lfs-example:chapter05
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| software:linux_server:lfs-example:chapter05 [2024/07/02 12:36] – создано - внешнее изменение 127.0.0.1 | software:linux_server:lfs-example:chapter05 [2024/07/15 01:22] (текущий) – [5.6.1. Установка библиотеки Libstdc++] vladpolskiy | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ======Часть III. Глава 5. Сборка кросс-тулчейна====== | ======Часть III. Глава 5. Сборка кросс-тулчейна====== | ||
| + | * [[software: | ||
| Содержание | Содержание | ||
| * [[software: | * [[software: | ||
| Строка 25: | Строка 26: | ||
| Очень важно, чтобы Binutils был скомпилированным первым, | Очень важно, чтобы Binutils был скомпилированным первым, | ||
| + | Переходим в библиотеку /sources | ||
| + | < | ||
| + | cd $LFS/ | ||
| + | </ | ||
| + | {{: | ||
| + | Распаковываем архив и переходим в каталог с его содержимым | ||
| + | < | ||
| + | tar -pxf binutils-2.42.tar.xz | ||
| + | cd binutils-2.42 | ||
| + | </ | ||
| + | {{: | ||
| В документации пакета Binutils рекомендуется выполнять сборку в отдельном каталоге, | В документации пакета Binutils рекомендуется выполнять сборку в отдельном каталоге, | ||
| Строка 32: | Строка 43: | ||
| cd build | cd build | ||
| </ | </ | ||
| + | {{: | ||
| <WRAP left round info 100%> | <WRAP left round info 100%> | ||
| **Примечание** \\ | **Примечание** \\ | ||
| Строка 49: | Строка 60: | ||
| | | ||
| </ | </ | ||
| - | + | < | |
| - | **Значение параметров настройки: | + | < |
| * **--prefix=$LFS/ | * **--prefix=$LFS/ | ||
| Строка 72: | Строка 83: | ||
| * **--enable-default-hash-style=gnu** | * **--enable-default-hash-style=gnu** | ||
| По умолчанию компоновщик генерирует как хеш-таблицу в стиле GNU, так и классическую хеш-таблицу ELF для общих библиотек и динамически связанных исполняемых файлов. Хеш-таблицы необходимы только для динамического компоновщика, | По умолчанию компоновщик генерирует как хеш-таблицу в стиле GNU, так и классическую хеш-таблицу ELF для общих библиотек и динамически связанных исполняемых файлов. Хеш-таблицы необходимы только для динамического компоновщика, | ||
| + | </ | ||
| + | подготовим Binutils к компиляции: | ||
| + | {{: | ||
| + | {{: | ||
| Скомпилируйте пакет: | Скомпилируйте пакет: | ||
| Строка 78: | Строка 92: | ||
| make | make | ||
| </ | </ | ||
| + | {{: | ||
| Установите пакет: | Установите пакет: | ||
| Строка 84: | Строка 98: | ||
| make install | make install | ||
| </ | </ | ||
| + | {{: | ||
| + | Можем воспользоваться примечанием и обернуть перечисленные команды сборки командой time: **time { ../ | ||
| + | < | ||
| + | time { ../ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | {{: | ||
| + | Итоговый отчет с указанием примерного времени сборки | ||
| + | {{: | ||
| + | Перейдем в каталог sources и удалим более не нужный разорхивированный каталог binutils-2.42 | ||
| + | < | ||
| + | cd ../.. | ||
| + | rm -Rf binutils-2.42 | ||
| + | </ | ||
| + | {{: | ||
| Подробная информация об этом пакете находится в [[software: | Подробная информация об этом пакете находится в [[software: | ||
| Строка 97: | Строка 130: | ||
| В этой главе часто возникают недоразумения, | В этой главе часто возникают недоразумения, | ||
| </ | </ | ||
| + | распакуем пакет gcc-13.2.0 и перейдем в распакованный каталог | ||
| + | < | ||
| + | tar -pxf gcc-13.2.0.tar.xz | ||
| + | cd gcc-13.2.0 | ||
| + | </ | ||
| + | {{: | ||
| + | Для успешной компиляции нам потребуются исходники ещё трех пакетов: | ||
| < | < | ||
| tar -xf ../ | tar -xf ../ | ||
| Строка 106: | Строка 145: | ||
| mv -v mpc-1.3.1 mpc | mv -v mpc-1.3.1 mpc | ||
| </ | </ | ||
| + | {{: | ||
| На хостах x86_64 измените имя каталога по умолчанию для 64-битных библиотек на «lib»: | На хостах x86_64 измените имя каталога по умолчанию для 64-битных библиотек на «lib»: | ||
| Строка 117: | Строка 156: | ||
| esac | esac | ||
| </ | </ | ||
| + | {{: | ||
| В документации к GCC рекомендуется собирать GCC в отдельном каталоге: | В документации к GCC рекомендуется собирать GCC в отдельном каталоге: | ||
| Строка 124: | Строка 163: | ||
| cd build | cd build | ||
| </ | </ | ||
| + | {{: | ||
| Подготовьте GCC к компиляции: | Подготовьте GCC к компиляции: | ||
| Строка 150: | Строка 189: | ||
| </ | </ | ||
| - | **Значение параметров настройки: | + | < |
| + | < | ||
| * **--with-glibc-version=2.39** | * **--with-glibc-version=2.39** | ||
| Строка 175: | Строка 215: | ||
| * **--enable-languages=c, | * **--enable-languages=c, | ||
| Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас. | Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас. | ||
| + | </ | ||
| + | если увидили ошибки, | ||
| + | {{: | ||
| Скомпилируйте GCC, выполнив: | Скомпилируйте GCC, выполнив: | ||
| - | |||
| < | < | ||
| - | make | + | time make |
| </ | </ | ||
| + | {{: | ||
| + | выод окончания компиляции | ||
| + | {{: | ||
| Установите пакет: | Установите пакет: | ||
| + | {{: | ||
| < | < | ||
| make install | make install | ||
| </ | </ | ||
| + | {{: | ||
| Во время сборки GCC установил пару внутренних системных заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные ограничения **limits.h**, | Во время сборки GCC установил пару внутренних системных заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные ограничения **limits.h**, | ||
| Строка 194: | Строка 237: | ||
| В приведенной ниже команде показан пример подстановки вложенных команд, | В приведенной ниже команде показан пример подстановки вложенных команд, | ||
| </ | </ | ||
| + | Выйдем из каталога build | ||
| < | < | ||
| cd .. | cd .. | ||
| + | </ | ||
| + | {{: | ||
| + | Создадим полную версию внутреннего заголовка с помощью команды | ||
| + | < | ||
| cat gcc/ | cat gcc/ | ||
| `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/ | `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/ | ||
| </ | </ | ||
| + | {{: | ||
| + | Перейдем в каталог sources и удалим более не нужный разорхивированный каталог binutils-2.42 | ||
| + | < | ||
| + | cd .. | ||
| + | rm -Rf gcc-13.2.0 | ||
| + | </ | ||
| + | {{: | ||
| Подробная информация об этом пакете находится в [[software: | Подробная информация об этом пакете находится в [[software: | ||
| Строка 209: | Строка 262: | ||
| |Требуемое дисковое пространство: | |Требуемое дисковое пространство: | ||
| + | Распаковываем архив и переходим в каталог с его содержимым | ||
| + | < | ||
| + | tar -pxf linux-6.7.4.tar.xz | ||
| + | cd linux-6.7.4 | ||
| + | </ | ||
| + | {{: | ||
| ====5.4.1. Установка заголовочных файлов==== | ====5.4.1. Установка заголовочных файлов==== | ||
| - | |||
| Ядро Linux должно предоставлять интерфейс прикладного программирования (API) для использования системной библиотекой C (Glibc в LFS). Это делается путем установки заголовочных файлов C, которые поставляются в архиве с исходным кодом ядра Linux. | Ядро Linux должно предоставлять интерфейс прикладного программирования (API) для использования системной библиотекой C (Glibc в LFS). Это делается путем установки заголовочных файлов C, которые поставляются в архиве с исходным кодом ядра Linux. | ||
| Убедитесь, | Убедитесь, | ||
| - | |||
| < | < | ||
| make mrproper | make mrproper | ||
| </ | </ | ||
| + | {{: | ||
| Теперь извлеките видимые пользователю заголовочные файлы ядра из исходного кода. Рекомендуемый способ make «headers_install» использовать нельзя, | Теперь извлеките видимые пользователю заголовочные файлы ядра из исходного кода. Рекомендуемый способ make «headers_install» использовать нельзя, | ||
| - | |||
| < | < | ||
| make headers | make headers | ||
| Строка 226: | Строка 282: | ||
| cp -rv usr/include $LFS/usr | cp -rv usr/include $LFS/usr | ||
| </ | </ | ||
| + | {{: | ||
| ====5.4.2. Содержимое заголовочных файлов Linux API==== | ====5.4.2. Содержимое заголовочных файлов Linux API==== | ||
| Строка 245: | Строка 301: | ||
| |/ | |/ | ||
| |/ | |/ | ||
| + | Перейдем в каталог sources и удалим более не нужный разорхивированный каталог linux-6.7.4 | ||
| + | < | ||
| + | cd .. | ||
| + | rm -Rf linux-6.7.4 | ||
| + | </ | ||
| + | {{: | ||
| =====5.5. Glibc-2.39===== | =====5.5. Glibc-2.39===== | ||
| Строка 252: | Строка 313: | ||
| |Требуемое дисковое пространство: | |Требуемое дисковое пространство: | ||
| - | ====5.5.1. Установка пакета Glibc==== | + | ====5.5.1. Установка пакета Glibc-2.39==== |
| + | Распакуем пакет glibc-2.39 и перейдем в распакованный каталог | ||
| + | < | ||
| + | tar -xvf glibc-2.39.tar.xz | ||
| + | cd glibc-2.39 | ||
| + | </ | ||
| + | {{: | ||
| Во-первых, | Во-первых, | ||
| - | |||
| < | < | ||
| case $(uname -m) in | case $(uname -m) in | ||
| Строка 265: | Строка 330: | ||
| esac | esac | ||
| </ | </ | ||
| + | {{: | ||
| <WRAP left round info 100%> | <WRAP left round info 100%> | ||
| **Примечание** \\ | **Примечание** \\ | ||
| Строка 276: | Строка 341: | ||
| patch -Np1 -i ../ | patch -Np1 -i ../ | ||
| </ | </ | ||
| + | {{: | ||
| В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге: | В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге: | ||
| Строка 283: | Строка 348: | ||
| cd build | cd build | ||
| </ | </ | ||
| + | {{: | ||
| Убедитесь, | Убедитесь, | ||
| Строка 289: | Строка 354: | ||
| echo " | echo " | ||
| </ | </ | ||
| + | {{: | ||
| Затем подготовьте Glibc к компиляции: | Затем подготовьте Glibc к компиляции: | ||
| Строка 303: | Строка 368: | ||
| </ | </ | ||
| - | ===Значение параметров настройки: | + | < |
| + | < | ||
| * **--host=$LFS_TGT, | * **--host=$LFS_TGT, | ||
| Строка 319: | Строка 385: | ||
| * **--disable-nscd** | * **--disable-nscd** | ||
| Параметр отключает сборку демона кэша службы имен, который больше не используется. | Параметр отключает сборку демона кэша службы имен, который больше не используется. | ||
| + | </ | ||
| + | {{: | ||
| На этом этапе может появиться следующее предупреждение: | На этом этапе может появиться следующее предупреждение: | ||
| Строка 334: | Строка 401: | ||
| <WRAP left round info 100%> | <WRAP left round info 100%> | ||
| **Примечание** \\ | **Примечание** \\ | ||
| - | Поступали сообщения о том, что этот пакет может не компилироваться при «параллельной сборке». Если это произойдет, | + | Поступали сообщения о том, что этот пакет может не компилироваться при «параллельной сборке». Если это произойдет, |
| </ | </ | ||
| Строка 340: | Строка 407: | ||
| < | < | ||
| - | make | + | time make |
| </ | </ | ||
| - | + | {{:software: | |
| - | Установите пакет: | + | |
| <WRAP left round alert 100%> | <WRAP left round alert 100%> | ||
| Строка 349: | Строка 415: | ||
| Если переменная LFS настроена неправильно, | Если переменная LFS настроена неправильно, | ||
| </ | </ | ||
| + | выполним проверки | ||
| + | < | ||
| + | id | ||
| + | </ | ||
| + | {{: | ||
| + | < | ||
| + | echo $LFS | ||
| + | </ | ||
| + | {{: | ||
| + | Установите пакет: | ||
| < | < | ||
| make DESTDIR=$LFS install | make DESTDIR=$LFS install | ||
| </ | </ | ||
| + | {{: | ||
| + | Результат установки | ||
| + | {{: | ||
| ===Значение опции make install:=== | ===Значение опции make install:=== | ||
| Строка 364: | Строка 441: | ||
| sed '/ | sed '/ | ||
| </ | </ | ||
| + | {{: | ||
| <WRAP left round important 100%> | <WRAP left round important 100%> | ||
| **Внимание** \\ | **Внимание** \\ | ||
| Строка 376: | Строка 453: | ||
| [Requesting program interpreter: | [Requesting program interpreter: | ||
| </ | </ | ||
| + | {{: | ||
| Обратите внимание, | Обратите внимание, | ||
| Строка 384: | Строка 462: | ||
| rm -v a.out | rm -v a.out | ||
| </ | </ | ||
| + | {{: | ||
| </ | </ | ||
| Строка 391: | Строка 470: | ||
| Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, | Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, | ||
| </ | </ | ||
| + | Перейдем в каталог sources и удалим более не нужный разорхивированный каталог glibc-2.39 | ||
| + | < | ||
| + | cd ../.. | ||
| + | rm -Rf glibc-2.39 | ||
| + | </ | ||
| + | {{: | ||
| Подробная информация об этом пакете находится в [[software: | Подробная информация об этом пакете находится в [[software: | ||
| Строка 406: | Строка 490: | ||
| Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в каталог gcc-13.2.0. | Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в каталог gcc-13.2.0. | ||
| </ | </ | ||
| + | Распаковываем архив и переходим в каталог с его содержимым | ||
| + | < | ||
| + | tar -xvf gcc-13.2.0.tar.xz | ||
| + | cd gcc-13.2.0 | ||
| + | </ | ||
| + | {{: | ||
| Создайте отдельный каталог сборки для libstdc++ и перейдите в него: | Создайте отдельный каталог сборки для libstdc++ и перейдите в него: | ||
| - | |||
| < | < | ||
| mkdir -v build | mkdir -v build | ||
| cd build | cd build | ||
| </ | </ | ||
| + | {{: | ||
| Подготовьте libstdc++ к компиляции: | Подготовьте libstdc++ к компиляции: | ||
| Строка 426: | Строка 514: | ||
| --with-gxx-include-dir=/ | --with-gxx-include-dir=/ | ||
| </ | </ | ||
| - | + | {{: | |
| - | ===Значение параметров настройки: | + | < |
| + | < | ||
| * **--host=...** | * **--host=...** | ||
| Строка 437: | Строка 526: | ||
| * **--with-gxx-include-dir=/ | * **--with-gxx-include-dir=/ | ||
| Указывает каталог установки для include-файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, | Указывает каталог установки для include-файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, | ||
| + | </ | ||
| Скомпилируйте Libstdc++, выполнив: | Скомпилируйте Libstdc++, выполнив: | ||
| + | {{: | ||
| < | < | ||
| - | make | + | time make |
| </ | </ | ||
| + | {{: | ||
| Установите библиотеку: | Установите библиотеку: | ||
| + | {{: | ||
| < | < | ||
| make DESTDIR=$LFS install | make DESTDIR=$LFS install | ||
| </ | </ | ||
| + | {{: | ||
| Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции: | Удалите архивные файлы libtool, поскольку они потенциально опасны при кросс-компиляции: | ||
| Строка 455: | Строка 544: | ||
| rm -v $LFS/ | rm -v $LFS/ | ||
| </ | </ | ||
| + | {{: | ||
| + | Перейдем в каталог sources и удалим более не нужный разорхивированный каталог binutils-2.42 | ||
| + | < | ||
| + | cd ../.. | ||
| + | rm -Rf gcc-13.2.0 | ||
| + | </ | ||
| Подробная информация об этом пакете находится в [[software: | Подробная информация об этом пакете находится в [[software: | ||
| + | * [[software: | ||
software/linux_server/lfs-example/chapter05.1719913015.txt.gz · Последнее изменение: — 127.0.0.1
