Операционная система UNIX. Руководство программиста

Редактирование внешних связей


Команда ld(1) вызывает редактор внешних связей непосредственно. Однако обычно эта команда не используется. Как правило, применяется команда запуска системы компиляции того или иного языка (например, cc), которая сама вызывает редактор связей. Редактор связей объединяет несколько объектных файлов в один, выполняет настройку ссылок, включает процедуры инициализации и генерирует таблицу имен, используемую отладчиком. Разумеется, можно выпол- нять редактирование связей и в случае единственного объектного файла. Результат редактирования связей по умолчанию помещается в файл a.out.

Файлы, указанные в команде ld и не являющиеся объектными (имена объектных файлов обычно оканчиваются на .o), рассматриваются как архивные библиотеки или файлы, содержащие директивы редактора связей. Команда ld имеет 16 опций, мы опишем четыре из них.

-o вых_файл
Используя эту опцию, можно сообщить редактору связей имя файла, которое следует использовать вместо a.out. Здесь нужно указать имя, по которому вы хотите в будущем вызывать Вашу программу. Конечно, можно достигнуть того же результата, выполнив команду mv a.out progname

-l библ
  Редактор связей будет использовать библиотеку с именем libбибл.a, где библ является цепочкой символов длиной не более 9. Данная опция позволяет дополнить список просматриваемых библиотек. Например, библиотека libc.a используется по умолчанию при вызове редактора связей посредством cc, а математическая библиотека libm.a, если это необходимо, должна быть указана с помощью данной опции.
Опция -l может встречаться в команде ld

несколько раз с различными значениями библ. Поскольку библиотека просматривается, когда встречается ее имя, порядок указания опций -l существен. Наиболее безопасно указывать опцию -l в конце командной строки.
Опция -l связана а опцией -L.

-L каталог
  Последовательность поиска библиотек вида libбибл.a

изменяется следующим образом: сначала производится поиск в указанном каталоге, а затем в каталогах, принимаемых по умолчанию, обычно /lib и /usr/lib.
Опцию удобно применять в случае, если у Вас имеется несколько версий библиотеки и Вы хотите использовать одну из них. Если библиотека найдена в указанном с помощью опции -L каталоге, ее поиск в других каталогах не производится. Поскольку опция -L влияет на поиск библиотек, указанных с помощью опции -l, в командной строке она должна предшествовать -l.

-u имя
  В таблицу имен заносится объект имя как неопределенный. Такая возможность полезна, когда загружаются только библиотечные файлы, поскольку в начальный момент таблица имен пуста и нужна какая-либо неразрешенная ссылка, чтобы начать загрузку первой подпрограммы.

Если редактор связей вызывается посредством команды cc, в выполняемый файл включается процедура инициализации (обычно для C-программ это /lib/crt0.o). После выполнения главной программы процедура инициализации обращается к системному вызову exit(2).

Редактор связей воспринимает файлы, содержащие директивы для него. Подробному описанию управляющего языка редактора связей посвящена отдельная глава.



Содержание раздела