Ожидаемое время сборки: 1.0 SBU
|
Binutils является колекцией средств разработки программ, содержащих компоновщик, ассемблер и другие средства для работы с объектными файлами и архивами.
Устанавливаемые программы: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings и strip
Устанавливаемые библиотеки: libiberty.a, libbfd.[a,so] и libopcodes.[a,so]
Binutils зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Важно чтобы Binutils был первым из пакетов, которые мы установим, потому что Glibc и GCC проводят некоторые тесты на доступные компоновщик и ассемблер для определения доступных опций.
Замечание: Хотя Binutils является важным пакетом, мы не собираемся запускать тестирование на этом простом шаге. Во-первых тестирование пока неуместно, а во-вторых, программы из этого этапа будут заново установлены на втором.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Binutils рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета binutils. Изменяя оптимизации для binutils, вы действуете на свой страх и риск.
В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками, в отдельной директории для сборки:
mkdir ../binutils-build
|
Note: Если вы хотите вычислить переменную SBU, которая используется в этой книге, вам надо засечь время, которое понадобится на сборку этого пакета. Это очень просто сделать чем-то похожим на такую команду: time { ./configure ... && ... && ... && make install; }.
Теперь подготовим Binutils к компиляции:
../binutils-2.14/configure \
|
Описание используемых опций:
--prefix=/tools: Это скажет скрипту конфигурации, что программы Binutils следует устанавливать в директорию /tools.
--disable-nls: Это отключит интернационализацию (сокращенно - i18n). Во-первых нам это пока не надо. а во-вторых nls может вызвать определенные проблемы при статической компиляции.
Вернемся к компиляции пакета:
make configure-host
|
Описание параметров сборки:
configure-host: Это правильно настроит все субдиректории. Статичаская сборка без этого будет невозможна. Мы используем эту опцию для беспроблемной работы.
LDFLAGS="-all-static": Это скажет компоновщику, что все программы Binutils будут скомпонованы статически. Точнее, строго говоря, "-all-static" отсылаемое программе libtool, которая отсылает "-static" компоновщику.
И установим пакет:
make install
|
Теперь подготовим к компоновщик к последующему "встраиванию" в Glibc:
make -C ld clean
|
Описание параметров сборки:
-C ld clean: Это говорит программе сборки удалить все скомпилированые файлы, но только в субдиректории ld.
-C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib: Этот параметр пересоберет все в субдиректории ld. Указание переменной файла сборки LIB_PATH заменит установленное значение по умолчанию и установит на расположение наших временных средств. Содержимое этой переменной указывает путь по умолчанию для поиска библиотек компоновщиком. Вы увидите, как это будет использовано далее в главе.
Внимание |
Не удаляйте сейчас директории для сборки и исходников Binutils. Вам они еще будут нужны в этой главе далее в их теперешнем состоянии. |