[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Процесс Си-компиляции - Редактор связей
Финальной стадией процесса компиляции является редактор связей.
Редактор связей создает исполняемый объектный файл, объединяя
объектные файлы, выполняя настройку и разрешая внешние ссылки.
Объектный код, используемый для создания исполняемой программы,
находится в .o файлах и библиотеках или архивных файлах. Стандартная
Си-библиотека /lib/libc/libc.a просматривается всегда, без явного
запроса пользователя. Но не все функции находятся в этой стандартной
библиотеке. Редактору связей можно задать поиск других библиотек.
Например, программа, использующая printf(3S), будет иметь
неразрешенную ссылку, пока соответствующая стандартная библиотека не
будет просмотрена. Компоновка функции, такой как printf, может
породить много других неразрешенных ссылок, требуя таким образом
добавления дополнительного объектного кода.
Архивы или библиотечные файлы создаются командой ar(1). Архивные файлы
имеют формат, описанный на странице руководства ar(4), состоящий из
заголовка архивного файла, таблицы символов архива, за которым следуют
заголовок и объектный код для каждого элемента.
Начиная с ОС UNIX+ System V, большинство редакторов связей
обрабатывают общий формат объектного файла(Common Object File Format -
COFF, обсуждаемый далее в этом приложении), создаваемый ассемблером.
Библиотека просматривается точно в том месте, где она встречается в
списке аргументов cc. Для редакторов связей, которые обрабатывают
COFF, таблица символов библиотеки (архива) просматривается
последовательно, делается столько проходов, сколько необходимо для
разрешения внешних ссылок, которые могут быть удовлетворены элементами
библиотеки. Таким образом, порядок элементов в библиотеке не является
критичным, хотя правильное их размещение может уменьшить количество
проходов.
Если при работе редактора связей не случилось ошибок, результат
помещается в файл a.out.
Замечания: редактор связей описан на странице ld(1) Справочного
руководства пользователя ОС UNIX+ System V. Большинству программистов
не требуется знать детали, как ld(1) конструирует a.out. Руководство
по средствам поддержки ОС UNIX+  System V дает углубленное описание
редактора связей и его командного языка.
Команда ar(1) и формат файла ar(4) могут быть найдены,
соответственно, в Справочном руководстве пользователя и Справочном
руководстве программиста ОС UNIX+  System V.
Команда ar t lib_name формирует таблицу содержимого, показывающего
имена всех функций в библиотеке.