diff --git a/chapter05/binutils-pass1.xml b/chapter05/binutils-pass1.xml index 1ec69a4..75e953a 100644 --- a/chapter05/binutils-pass1.xml +++ b/chapter05/binutils-pass1.xml @@ -90,7 +90,7 @@ cd build --with-sysroot=$LFS Для кросс-компляции указывает системе сборки искать в $LFS - библиотеки целевой системы по мере необходимости.. + библиотеки целевой системы, если необходимо. @@ -131,7 +131,7 @@ cd build - Продолжайте компиляцию пакета: + Скомпилируйте пакет: make diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml index 3414e85..c017dbe 100644 --- a/chapter05/gcc-pass1.xml +++ b/chapter05/gcc-pass1.xml @@ -48,9 +48,9 @@ Распакуйте каждый пакет в исходный каталог GCC и переименуйте получившиеся каталоги, чтобы процедуры сборки GCC использовали их автоматически: - В этой главе часто возникают недоразумения. Процедуры такие же, - как и в любой другой главе, как было описано ранее (). Сначала распакуйте пакет gcc из архива, + В этой главе часто возникают недоразумения, хотя применяются те же + процедуры, что и в любой другой главе, следуйте инструкции которую получили ранее + (). Сначала распакуйте пакет gcc из архива, а затем перейдите в созданный каталог. Только после этого следует приступить к приведенным ниже инструкциям. @@ -85,10 +85,11 @@ cd build --with-sysroot=$LFS \ --with-newlib \ --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ --disable-nls \ --disable-shared \ --disable-multilib \ - --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ @@ -103,7 +104,7 @@ cd build --with-glibc-version=&glibc-version; - Этот параметр указывает версию glibc, которая будет использоваться + Этот параметр указывает версию Glibc, которая будет использоваться на целевой системе. Он не имеет отношения к libc хост-дистрибутива, потому что все, скомпилированное в этом разделе, будет выполняться в среде chroot, которая изолирована от libc хост-дистрибутива. @@ -128,11 +129,27 @@ cd build + + --enable-default-pie и + --enable-default-ssp + + Эти параметры позволяют GCC по умолчанию компилировать программы + с некоторые функциями усиливающими безопасность (более подробная + информация о них приведена в в Главе 8). + На данном этапе это не является строго обязательным, поскольку компилятор + будет создавать только временные исполняемые файлы. Но лучше, чтобы + временные пакеты были максимально приближены к тем, что будут в готовой + системе LFS. + + + + --disable-shared - Этот параметр заставляет использовать некоторые внутренние структуры - данных, которые необходимы, но не могут быть обнаружены при сборке кросс-компилятора. + Этот параметр заставляет GCC статически связывать свои внутренние + библиотеки. Он необходим потому что общие библиотеки требуют Glibc, + который еще не установлен в целевой системе. @@ -145,16 +162,15 @@ cd build - --disable-decimal-float, --disable-threads, - --disable-libatomic, --disable-libgomp, + --disable-threads, + --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx - Эти аргументы отключают поддержку расширений для работы с десятичным - числами с плавающей запятой, многопоточностью, libatomic, libgomp, libquadmath, - libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции не - будут компилироваться при сборке кросс-компилятора и не нужны для задач - кросс-компиляции временной libc + Эти аргументы отключают поддержку расширений для работы с многопоточностью, + libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ + соответственно. Эти функции могут не скомпилироваться при сборке кросс-компилятора + и не нужны для задач кросс-компиляции временной libc @@ -176,16 +192,24 @@ cd build make install - Во время сборки GCC установил пару внутренних системных заголовков. + Во время сборки GCC установил пару внутренних системных заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные ограничения limits.h, в данном случае $LFS/usr/include/limits.h. Однако во время сборки GCC $LFS/usr/include/limits.h не существует, поэтому только - что установленный внутренний заголовок является частичным, автономным файлом - и не включает расширенные функции системного заголовка. Этого достаточно для - сборки glibc, но полный внутренний заголовок понадобится позже. Создайте - полную версию внутреннего заголовка с помощью команды, идентичной тому, что - система сборки GCC делает в обычных обстоятельствах: + что установленный внутренний заголовочный файл является частичным, автономным файлом + и не включает расширенные функции системного файла. Этого достаточно для + сборки Glibc, но полный внутренний заголовочный файл понадобится позже. Создайте + полную версию внутреннего заголовочного файла с помощью команды, идентичной той, что + система сборки GCC использует в обычных обстоятельствах: + + + В приведенной ниже команде показан пример подстановки вложенных команд, + используя два метода: обратные кавычки и конструкцию $(). + Его можно было бы переписать, используя один и тот же метод для обеих замен, + но сделано так, чтобы продемонстрировать, как их можно использовать одновременно. + В целом метод $() предпочтительнее. + cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \