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) в Справочнике программиста.
ОГРАНИЧЕНИЯ
Опции и файлы директив обеспечивают большую гибкость в
работе редактора связей; однако тот, кто использует директивы, должен сознавать некоторую дополнительную ответственность. Директивы должны сохранять следующие
свойства программ:
- Язык C определяет пустой указатель как нуль. Указатель, которому присвоен нуль, не должен указывать ни на какой об ект. Чтобы гарантировать выполнение этого свойства, пользователи не должны
помещать об екты в секции данных по нулевому виртуальному адресу.
- Когда редактор связей вызывается на выполнение командой cc(1), программа пользователя об единяется
с инициализирующей программой. Эта последняя после
обращения к программе пользователя выполняет системный вызов exit [см. exit(2)]. Если пользователь
вызывает редактор связей сам, он должен гарантировать, что программа завершает выполнение системным
вызовом exit.
Имена etext, edata и end [см. end(3C)] резервируются и
определяются редактором связей. Недопустимо переопределять их в программе пользователя.
Если редактор связей не распознает какой-либо входной
файл как об ектный или архивный, то он предполагает,
что файл содержит директивы редактора связей, и пытается сделать синтаксический разбор. В этом случае возможны сообщения о синтаксических ошибках.
Каждое арифметическое выражение может содержать только
одно имя, определяемое далее.