LD(1) LD(1)
НАЗВАНИЕ
ld - редактор связей для объектных файлов обычного фор-
мата
СИНТАКСИС
ld [-e вх_имя] [-f заполнитель] [-l библ] [-m] [-o вых_файл] [-r]
[-a] [-s] [-t] [-uнеоп_имя] [-x] [-z] [-Lкаталог] [-М] [-N] [-V]
[-VS номер] [-Y[LU],каталог] файл ...
ОПИСАНИЕ
Команда ld объединяет несколько объектных файлов в
один, размещает команды и данные, разрешает внешние
ссылки и генерирует таблицу имен для символьной отлад-
ки. В простейшем случае задаются имена нескольких об -
ектных программ, и редактор связей об единяет их в один
об ектный модуль, который может затем или выполняться,
или использоваться в качестве исходного при последующих
вызовах ld. Результат редактирования связей помещается
в файл с именем a.out, который является выполняемым,
если во время работы не было зафиксировано ошибок. Если
какой-либо исходный файл не является об ектным, ld
предполагает, что это либо текстовый файл с директивами
для редактора связей, либо архивная библиотека.
Библиотеки, являющиеся аргументами, обрабатываются ров-
но один раз, когда до них доходит очередь по списку ар-
гументов. Библиотека может быть либо перемещаемой ар-
хивной, либо разделяемой. Загружаются только те под-
программы, на которые есть неразрешенные внешние ссыл-
ки. Таблица имен библиотеки (архива) просматривается
последовательно, причем столько раз, сколько необходимо
для разрешения внешних ссылок на библиотечные подпрог-
раммы. Тем самым порядок следования элементов библиоте-
ки оказывается несущественным, если только какое-либо
внешнее имя не определяется в нескольких элементах биб-
лиотеки.
Редактор связей ld распознает нижеследующие опции. Об-
ратите внимание на отсутствие пробелов между флагом -u
и аргументом опции неоп_имя, между -L и каталогом.
-e вх_имя
Установить подразумеваемый адрес входа в результи-
рующий файл равным адресу объекта вх_имя. Без этой
опции подразумеваемый адрес равен 0.
-f заполнитель
Заполнить указанным значением (целым числом от 0
до 32767) "дыры" в выходных секциях и секциях неи-
нициализированных данных.
-l библ
Использовать библиотеку с именем libбибл.a, где
библ является цепочкой символов длиной не более 7.
Библиотека просматривается, когда встречается ее
имя, поэтому порядок указания опции -l существе-
нен. По умолчанию библиотеки разыскиваются в ката-
логах LIBDIR и LLIBDIR.
-m Выдать карту входных/выходных секций на стандарт-
ный вывод.
-o вых_файл
Вывести результат редактирования связей в файл с
именем вых_файл. По умолчанию используется имя
a.out.
-r Оставить в выходном объектном файле информацию о
настройке ссылок. Она нужна, если выходной файл
будет входным при последующем редактировании свя-
зей. Редактор связей не считает ошибкой наличие
неразрешенных ссылок; просто результирующий файл
не будет выполняемым.
-a Создать абсолютный файл. Эта опция работает по
умолчанию, если не задается опция -r. В совокуп-
ности с опцией -r опция -a обеспечивает выделение
памяти для общих глобальных объектов.
-s Не помещать в выходной объектный файл таблицу имен
и информацию о номерах строк.
-t Отказаться от выдачи предупреждений при многократ-
ном определении объектов с разными размерами.
-uнеоп_имя
Занести в таблицу имен объект неоп_имя как неопре-
деленный. Такая возможность полезна, когда загру-
жаются только библиотечные файлы, поскольку в на-
чальный момент таблица имен пуста и нужна "затрав-
ка" в виде неразрешенной ссылки для загрузки из
библиотеки первой программы.
-x Не помещать локальные (не .globl) имена в выходную
таблицу имен; помещать только внешние и статичес-
кие имена. Использование этой опции несколько
уменьшает размер выходного файла.
-z Не размещать что-либо по нулевому адресу. Эта оп-
ция предоставляет возможность обнаружить нулевые
указатели во время выполнения.
-Lкаталог
Изменить алгоритм поиска библиотек libбибл.a: ис-
кать их сначала в заданном каталоге, а затем в ка-
талогах LIBDIR и LLIBDIR. Эта опция работает толь-
ко в том случае, если в командной строке она пред-
шествует опции -l.
-М Выдавать сообщение для каждого многократно опреде-
ленного внешнего объекта.
-N Расположить секцию команд в самом начале сегмента
команд, а не за всеми заголовками, и в образе па-
мяти поместить секцию данных непосредственно за
секцией команд.
-V Вывести информацию о версии редактора связей.
-VS номер
Использовать десятичный номер для идентифицикации
версии выходного файла a.out. Номер версии помеща-
ется в заголовок файла.
-Y[LU],каталог
Изменить стандартный каталог, используемый для по-
иска библиотек. Если задано L, то первый стандарт-
ный каталог, который просматривает редактор связей
ld, LIBDIR, замещается указанным каталогом. Если
задано U и редактор связей ld работает со вторым
стандартным каталогом LLIBDIR, то LLIBDIR замеща-
ется указанным каталогом. Если редактор связей ld
работает только с одним стандартным каталогом и
задано U, то печатается предупреждение и опция иг-
норируется.
ФАЙЛЫ
LIBDIR/lib*.a Библиотеки.
LLIBDIR/lib*.a Библиотеки.
a.out Выходной файл.
LIBDIR Обычно /lib.
LLIBDIR Обычно /usr/lib.
СМ. ТАКЖЕ
as(1), cc(1), mkshlib(1).
exit(2), end(3C), a.out(4), ar(4) в Справочнике прог-
раммиста.
ОГРАНИЧЕНИЯ
Опции и файлы директив обеспечивают большую гибкость в
работе редактора связей; однако тот, кто использует ди-
рективы, должен сознавать некоторую дополнительную от-
ветственность. Директивы должны сохранять следующие
свойства программ:
1. Язык C определяет пустой указатель как нуль. Ука-
затель, которому присвоен нуль, не должен указы-
вать ни на какой об ект. Чтобы гарантировать вы-
полнение этого свойства, пользователи не должны
помещать об екты в секции данных по нулевому вир-
туальному адресу.
2. Когда редактор связей вызывается на выполнение ко-
мандой cc(1), программа пользователя об единяется
с инициализирующей программой. Эта последняя после
обращения к программе пользователя выполняет сис-
темный вызов exit [см. exit(2)]. Если пользователь
вызывает редактор связей сам, он должен гарантиро-
вать, что программа завершает выполнение системным
вызовом exit.
Имена etext, edata и end [см. end(3C)] резервируются и
определяются редактором связей. Недопустимо переопреде-
лять их в программе пользователя.
Если редактор связей не распознает какой-либо входной
файл как об ектный или архивный, то он предполагает,
что файл содержит директивы редактора связей, и пытает-
ся сделать синтаксический разбор. В этом случае возмож-
ны сообщения о синтаксических ошибках.
Каждое арифметическое выражение может содержать только
одно имя, определяемое далее.
|