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)] резервируются и определяются редактором связей. Недопустимо переопреде- лять их в программе пользователя. Если редактор связей не распознает какой-либо входной файл как объектный или архивный, то он предполагает, что файл содержит директивы редактора связей, и пытает- ся сделать синтаксический разбор. В этом случае возмож- ны сообщения о синтаксических ошибках. Каждое арифметическое выражение может содержать только одно имя, определяемое далее.@