Вперед Назад Содержание

2. Запуск

LD создавался для обеспечения максимально возможного контроля за процессом линковки и совместимости с другими линкерами. В результате в LD большое число опций, управляющих поведением линкера.

2.1 Опции командной строки.

Список опции которые используются в LD:

ld [ -o <имя выходного файла> ] <объектный файл> [-A<архитектура>] [-b <входной-файл>] [-Bstatic] [-Bdynamic] [-Bsymbolic] [-c <MRI-имя-файла>] [-d | -dc | -dp] [-defsym <символ=выражение>] [-dinamic-linker файл] [-embeded-relocs] [-e <вхождение>] [-F] [-F<формат>] [-format <входной-файл>] [-g] [-G <значение>] [-help] [-i] [-l имя] [-L <католог-поиска>] [-M] [-map <файл-карты>] [-m <эмуляция>] [-N| -n] [-noinhabit-exec] [-no-keep-memory] [-oformat <формат выходного файла>] [-R <имя-файла>] [-relax] [-retain-symbols-file <имя-файла>] [-r| -Ur] [-rpath <имя-директории>] [-rpath-link <имя-директории>] [-S] [-s] [-soname <имя>] [-shared] [-sort-common] [-stats] [-Т <командный-файл>] [-Ttext <орг>] [-Tdata <орг>] [-Tbss <орг>] [-t] [-tradional-format] [-u <cимвол>] [-V] [-v] [--verbose] [-version] [-warn-common] [-warn-constructors] [-warn-once] [-y <символ>] [-X] [-x] [-( <архивы> -)] [--start-group <архивы> --end-group] [-split-by-reloc <число>] [-split-by-file] [-whole-archive]

Такое изобилие опций может показаться отталкивающим, но на самом деле большинство опций используются крайне редко. Например, обычно LD используется для линковки стандартных объектных файлов Юникса на стандартной Юникс системе. На такой системе для линковки файла hello.o в запускаемый файл достачно набрать следующую команду:

ld -o <имя-выходного-файла> /lib/crt0.o hello.o -lc
В результате выполнения этой команды LD создаст файл <имя-выходного-файла> как результат линковки файлов '/lib/crt0.o' с 'hello.o' и библиотеки 'libc.a', которая должна находится в стандартных директориях поиска. (См. опцию -L).

Опции могут находиться в командной строке в любом порядке и при необходимости могут повторяться. Повторение большинства опций с различными аргументами в большинстве случаев не будет иметь никакого эффекта, или будут переопределены предыдущие нахождения (те, которые находятся левее в командной строке) этой опции.

Исключения - опции, которые используются обычно больше одного раза: '-A', '-b' (или -format), '-defsym', '-L', '-l', '-R', '-u' и '-(' (или --start-group).

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

Обычно линкер запускается хотя бы с одним объектным файлом, но при желании можно указать другие формы двоичных файлов, используя опции '-l' и '-R', или используя "язык управления линкером" (далее ЯУЛ). Если никакие двоичные файлы не указаны, линкер выдаст предупреждающее сообщение "No input files" ("никаких входных файлов") и прекратит свое выполнение.

Если линкер не может распознать тип формата объектного файла, он будет считать, что это файл, содержащий команды ЯУЛ (далее скрипт или скрипт файл). Скрипт, определенный таким путем, будет добавлен к главному скрипту LD, используемому для линковки (или любому другому скрипту, используемому по умолчанию, или к скрипту, определенному с помощью опции '-T'). Эта возможность позволяет LD работать с файлами, которые кажутся объектными, а на самом деле являются скриптами.

Для опций, название которых состоит из одной буквы, аргумент опции может идти как сразу после названия опции, так и после пустого символа (например, пробела).

Для опций, имена которых состоят из нескольких букв, аргумент должен идти либо после пустого символа, либо после знака равенства ('='). Перед названием опции может быть как два тире, так и одно. Например, '-oformat' и '--oformat' описывают одинаковые опции.

-A<архитектура>
В текущей версии ld эта опция используется только для процессоров семейства Intel 960. В конфигурации LD для этого процессора аргумент <архитектура> идентифицирует используемую в системе модификацию процессора и, руководствуясь полученной информацией, включает дополнительные диагностические процедуры и изменяет некоторые значения по умолчанию (более полную информацию см. в параграфе 4.2). В будущих версиях LD будет, вероятно, обеспечена поддержка и других семейств процессоров.

-b <входной-файл>
LD может быть сконфигурирован для поддержки нескольких форматов объектного файла. Если LD сконфигурирован таким образом, возможно использовать опцию '-b' для указания типа объектного файла для файлов, которые будут описаны после этой опции в командной строке. Даже когда LD сконфигурирован для поддержки нескольких форматов объектных файлов, совсем необязательно каждый раз при запуске LD указывать тип объектного файла, так как по умолчанию LD использует наиболее распространенный в текущей архитектуре формат объектного файла. <входной-файл> - это текстовая строка, содержащая название формата объектного файла, поддерживаемого библиотекой BFD (чтобы получить список поддерживаемых форматов, необходимо запустить команду 'objdump -i'). '-format' имеет такой же эффект, как и команда ЯУЛ 'TARGET' (См. главу 5). Возможно использование этой опции при линковке файлов с нестандартным объектным форматом. Также возможно использование этой опции при линковке файлов с разными форматами путем помещения опции '-b' перед каждой группой объектных файлов одного формата. Формат, используемый по умолчанию, берется из внешней переменной окружения 'GNUTARGET' (См. 2.2). Можно указать используемый формат, используя ЯУЛ команду TARGET (См. 3.6).

-Bstatic
Не использовать при линковке разделяемые библиотеки. Эта опция имеет смысл только на платформах, поддерживающих разделяемые библиотеки.

-Bdynamic
Использовать динамические библиотеки. Эта опция имеет смысл только на платформах, поддерживающих разделяемые библиотеки. Эта опция на большинстве платформ обычно установлена по умолчанию.

-Bsymbolic
При создании разделяемой библиотеки связать ссылки на глобальные имена с описаниями в разделяемой библиотеке. Эта опция имеет смысл только на ELF платформах, которые поддерживают разделяемые библиотеки.

-c MRI-имя-файла
Для обеспечения соместимости с линкерами, создаными MRI, LD поддерживает скрипты, написанные на ЯУЛ линкеров MRI (См. приложение А). Для использования скриптов, написанных на ЯУЛ LD, используйте опцию '-T'. Если LD не может найти файл <MRI-имя-файла> в текущем каталоге, он ищет его в директориях, указанных опцией '-L'.

-d -dc -dp
Эти три опции эквивалентны. Несколько форм поддерживаются для обеспечения совместимости с другими линкерами. Они позволяют отводить место для переменных, даже если формат выходного файла - переместимый. Команда скрипта FORCE_COMMON_ALOCATION имеет такое же действие (см. 3.6).

-defsym символ=выражение
Создает глобальный символ в выходном файле, содержащий абсолютный адрес в заданном выражении. Вы можете использовать эту опцию столько раз, сколько Вам необходимо для определения множества символов в командной строке. Поддерживается ограниченный набор арифметических операций. Вы можете задать шестнадцатиричную константу, или имя существующего символа, или использовать плюс или минус для сложения или вычитания шестнадцатиричных констант или символов. Если Вам необходимы более сложные выражения, возможно использование ЯУЛ из скрипта (см. 3.2.6). Замечание: не должно быть пропусков между символом, знаком равенства и выражением.

-dinamic-linker файл
Устанавливает имя динамического линкера. Эта опция имеет смысл только при создании динамических ELF файлов. Использование стандартного динамического линкера предпочтительнее; не используйте эту опцию, если Вы не уверены в своих действиях.

-embedded-relocs
Эта опция имеет смысл, только если линкуется позиционно-независимый код для архитектуры MIPS, созданный с помощью опции '-memembeded-pic' GNU компилятора и ассемблера. Эта опция заставляет линкер создать таблицу, которая может быть использована во время выполнения для перемещения любых данных, которые были статически проинициализированы в указателе (подробности - см. текст в файле 'testsuite/ld-mpic').

-e вхождение
Используйте вхождение для уточнения символа, с которого будет начинаться выполнение Вашей программы, отличного от принятого по умолчанию (см. 3.5).

-F -Fформат
Игнорируется. Некоторые старые линкеры используют эту опцию для определения формата объектного файла как для входных, так и для выходных объектных файлов. Вместо этой опции LD использует опции '-b' или '-format'. Опции '-F' поддерживаются для совместимости со скриптами, написанными для старых линкеров.

-format <входной-файл>
Синоним опции '-b'.

-g
Игнорируется. Поддерживается для обеспечения совместимости с остальными утилитами.

-G значение
Устанавливает максимальый размер объектов для оптимизации с использованием регистра GP под форматом объектного файла MIPS ECOFF. Игнорируется для остальных форматов объектного файла.

-help
Выводит список опций командной строки и завершает выполнение линкера.

-i
Выполняет инкрементальную линковку аналогично опции '-r'.

-l имя
Добавляет архивный файл с указанным именем в список файлов для линковки. Эта опция может быть использована неограниченное количество раз. LD будет искать по всем указанным путям архивный файл (библиотеку) с именем lib<имя>.a

-L <католог-поиска>
Добавляет каталог поиска в список каталогов, в которых LD будет искать архивные файлы (библиотеки) и управляющие скрипты LD. Вы можете использовать эту опцию неограниченное число раз. Директории просматриваются в том порядке, в котором они указываются в командной строке. Указанные каталоги просматриваются прежде каталогов по умолчанию. Все файлы, указанные в опции '-l', будут искомы во всех директориях, указанных в опции '-L', независимо от порядка, в котором они находились в командной строке. Каталог по умолчанию зависит от типа эмуляции, который в настоящий момент использует LD, и в некоторых случаях от того, как он был сконфигурирован (см. 2.2). Каталоги также могут быть указаны в скрипте линкера с помощью команды SEARCH_DIR. Каталоги, описанные таким путем, просматриваются с той позиции, с которой скрипт встретился в командной строке.

-M
Печатает карту линковки - диагностическую информацию о том, куда символы были размещены линкером, а также информацию о глобальных переменных.

-map <файл-карты>
Напечатать карту линковки в файл с именем <файл-карты> - диагностическую информацию о том, куда символы были размещены линкером, а также информацию о размещении глобальных переменных.

-m эмуляция
Включает режим эмуляции. Вы можете получить список доступных эмуляций с помощью опций '--verbose' или '-V'. Эмуляция, принятая по умолчанию, зависит от того, как LD был сконфигурирован.

-N
Делает секции текста и данных доступными для чтения и записи. Также не делает постраничного выравнивания сегмента данных. Если формат объектного файла поддерживает магические номера в стиле UNIX-а, то LD помечает выходной файл как OMAGIC.

-n
Делает сегмент текста доступным только для чтения и помечает выходной файл как NMAGIC, если это возможно.

-noinhabit-exec
Создает выходной файл независимо от появления ошибок в процессе линковки. Обычно линкер не создает выходного файла, если обнаруживает какие-нибудь ошибки в процессе линковки.

-no-keep-memory
Обычно LD в целях оптимизации кэширует таблицы имен входных файлов в памяти. Эта опция говорит LD не использовать данную оптимизацию и он будет считывать заново таблицы имен по необходимости. Данная опция используется для того, чтобы избежать нехватки памяти при линковки очень больших файлов.

-о <выходной-файл>
Задает имя выходного файла. Если эта опция не определена, то по умолчанию используется имя "a.out". Команда ЯУЛ OUTPUT тоже может задавать имя выходного файла.

-oformat <формат выходного файла>
LD может быть сконфигурирован для поддержки нескольких форматов объектного файла. Если Ваш LD сконфигурирован таким образом, Вы можете использовать опцию '-oformat' для определения формата объектного файла, который будет использоваться в выходном файле. Даже если LD сконфигурирован для поддержки множества форматов объектного файла, обычно Вы не должны определять это, так как LD будет использовать формат объектного файла по умолчанию. <формат выходного файла> - это текстовая строка, содержащая имя формата объектного файла, поддерживаемого библиотекой BFD. Вы можете получить список доступных форматов объектного файла с помощью команды "objdump -i". Команда ЯУЛ OUTPUT_FORMAT может также задавать формат объектного файла, но данная опция переопределяет его (см 5).

-R имя файла
Читает таблицу имен и их адреса из указанного файла, но не помещает их в выходном файле. Это позволяет создать выходной файл, в котором описанные имена будут находится по абсолютным позициям памяти, определенным в других программах.

-relax
Эта опция является архитектурно зависимой. В настоящей момент эта опция поддерживается только на H8/300 и на intel960 (см 4.1, 4.2). На некоторых платформах опция '-relax' совершает глобальную оптимизацию, которая становится возможной когда линкер узнает адреса в программе, такие как адреса меток и т.п. На платформах для которых это не поддерживается опция '-relax' игнорируется.

-retain-symbols-file <имя-файла>
Использовать только символы описанные в указанном файле, игнорируя все остальные. Используемый файл содержит по одному имени символа на строке. Данная опция особенно необходима в окружениях (таких как VxWorks), где большая таблица имен изменяется во время выполнения программы для оптимизации работы с памятью. Опция '-retain-symbols-file' не игнорирует неопределенные символы и символы, необходимые для перемещения. Вы можете использовать опцию '-retain-symbols-file' только один раз в командной строке. Она переопределяет опции '-s' и '-S'.

-rpath <имя-директории>
Добавляет директорию в список директорий, в которых ищутся разделяемые библиотеки. Эта опция используется при линковке файла в формате ELF с разделяемыми объектами. Все аргументы опции '-rpath' объединяются и передаются линкеру времени выполнения, который использует эту информацию для обнаружения разделяемых объектов при запуске программ. Опция '-rpath' также используется для обнаружения разделяемых объектов, которые нужны непосредственно во время линковки (см. описание опции '-rpath-link'). Если опция '-rpath' не используется при линковке файлов в формате ELF, вместо нее используется содержимое внешней переменной окружения LD_RUN_PATH, если она определена.

Опция '-rpath' может быть использована в SunOS. По умолчанию SunOS линкер времени выполнения будет производить поиск по информации данной опцией '-L'. Но если задана опция '-rpath', поиск будет производиться исключительно при использовании данных опции '-rpath', игнорируя опцию '-L'. Это может быть весьма полезно при использовании gcc, добавляющего много опций '-L', которые могут указывать на файловые системы, смонтированные на NFS.

-rpath-link <имя-директории>
При использовании объектного формата ELF или операционной системы SunOS, одна разделяемая библиотека для своей работы может потребовать другую. Такое случается, когда при запуске LD используется опция '-shared', и разделяемая библиотека указана как один из входных файлов.

Когда линкер встречает такую зависимость при неразделяемой линковке, он будет пытаться автоматически найти требуемую разделяемую библиотеку и включить ее в процесс линковки, если она не была указана раньше. В таком случае опция '-rpath-link' определяет набор директорий, которые будут просматриваться первыми. При передаче нескольких имен директорий Вы можете использовать либо опцию '-rpath-link' несколько раз в командной строке, либо разделять имена директорий с помощью двоеточия. Линкеры используют следующие пути поиска для обнаружения требуемых разделяемых библиотек:

  1. Все директории, заданные опцией '-rpath-link'
  2. Все директории, заданные опцией '-rpath'. Отличие между опциями '-rpath' и '-rpath-link' заключается в том, что директории, заданные опцией '-rpath' включаются в выходной файл и используются во время исполнения, тогда как данные опции '-rpath-link' используются только во время линковки.
  3. В случае использования формата объектного файла ELF, когда опции '-rpath' и '-rpath-link' не были использованы, поиск производится по информации, хранящейся во внешней переменной окружения LD_RUN_PATH.
  4. В операционной системе SunOS, если опция '-rpath' не была использована, поиск директорий производится согласно информации опции '-L'.
  5. Для родного линкера просматривается содержимое переменной LD_LIBRARY_PATH.
  6. По умолчанию поиск проводится в директориях '/lib' и '/usr/lib' Если требуемая разделяемая библиотека не была найдена, линкер выдаст предупреждающее сообщение и продолжит процесс линковки.
-r
Создать перемещаемый выходной файл, то есть создать файл, который впоследствии может быть использован в качестве входного файла LD. Обычно это называется частичной линковкой. В частности, в операционных системах, которые поддерживают стандартные магические номера UNIX-а, эта опция также устанавливает магический номер выходного файла в OMAGIC, если эта опция не использовалась, на выходе линкера получится законченный файл. При линковке C++ программ эта опция также запретит линкеру устанавливать обращение конструктора; чтобы отменить это, используйте опцию '-Ur'. Эта опция аналогична опции '-i'.

-S
Не помещать отладочную информацию в выходной файл. Однако таблица символов будет записана.

-s
Не выводить никакой дополнительной информации в выходной файл, как отладочной, так и таблицы символов.

-soname <имя>
При создании разделяемого файла в формате ELF установить внутренее поле DT_SONAME в указанное имя. Когда запускаемый файл линкуется с разделяемым объектом, содержащим информацию в поле DT_SONAME, во время выполнения он будет вызывать динамический линковщик для загрузки разделяемого объекта, определенного полем DT_SONAME, вместо того, чтобы использовать имя файла, указанного линкеру.

-shared
Создать разделяемую библиотеку; в настоящий момент это поддерживается только для объектных файлов в формате ELF или операционной системы SunOS. В SunOS линкер будет автоматичеки создавать разделяемую библиотеку, если не используется опция '-e', и не нашлось никаких неопределенных символов в процессе линковки.

-sort-common
Обычно когда LD помещает глобальные общие символы в соответствующие секции, он сортирует их по размеру. Сначала идут однобайтовые символы, потом двухбайтовые, потом четырехбайтовые, а потом все остальные. Это позволяет избежать разночтений между символами и конструкциями выравнивания. Данная опция отключает такую сортировку.

-split-by-reloc <число>
Пытается создать дополнительные секции в выходном файле так, чтобы ни одна выходная секция в файле не содержала большее число перемещений, чем было указано в аргументе к данной опции. Эта опция очень полезна при создании больших файлов для загрузки в некоторые ядра реального времени c форматом объектного файла COFF, так как формат COFF не позволяет описать более 65535 перемещений в одной секции. (Замечание: Это не будет работать в форматах файлов, которые не поддерживают независимых секций). Линкер не будет объединять несколько отдельных секций для переопределения, так что если одна секция содержит большее число перемещений, чем было указано, выходная секция также будет содержать больше перемещений.

-split-by-file
Аналогична предыдущей опции, но создает новые секции для каждого входного файла.

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

-Tbss -Tdata <орг> -Ttext <орг>
Использовать <орг> как адрес, с которого начинается сегмент bss, data или text у выходного файла. <орг> должен быть задан как шестнадцатиричное число. Для совместимости со старыми линкерами вы можете опустить символы '0x', обычно идущие вместе с шестнадцатиричными числами.

-Т <командный-файл> -T<командный-файл>
Читать команды ЯУЛ из указанного файла. Эти команды замещают скрипт LD, принятый по умолчанию, а не являются дополнением к нему, поэтому в файле должно быть определено все необходимое для описания целевого формата объектного файла (см. 3). Если файл не найден в текущем каталоге, LD ищет его в директориях, указанных опцией '-L'. При использовании нескольких опций '-T' в командной строке их данные объединяются.

-t
Выводить имена входных файлов линкера по мере их обработки.

-tradional-format
Для некоторых архитектур выход LD может отличаться от выхода стандартного линкера, существующего на этих архитектурах. Эта опция заставляет LD не делать этих отличий. Для примера, в операционной системе SunOS LD объединяет повторяющиеся вхождения в таблице строк. Это позволяет уменьшить формат выходного файла с полной отладочной информацией почти на 30%. К сожалению стандартный отладчик DBX, поставляющийся вместе с операционной системой SunOS, не понимает результирующую программу. Однако GDB работает без ошибок. При использовании опции '-traditional-format' LD не будет объединять повторяющиеся вхождения.

-u <cимвол>
Описывает символ как неопределенный. Это позволяет избежать проблем при использовании дополнительных модулей стандартных библиотек. Вы можете использовать опцию '-u' несколько раз в командной строке.

-Ur
Для всего, кроме программ C++, эта опция эквивалентна опции '-r'; она создает перемещаемый выходной файл, то есть файл, который может быть входным к LD. При линковке C++ программ опция '-Ur' вычисляет обращения к конструкторам. В отличие от опции '-r', нельзя использовать опцию '-Ur' с файлами которые сами были слинкованы с опцией '-Ur', так как таблица конструкторов может быть построена только один раз, и туда нельзя ничего добавлять. Используйте '-Ur' только для последней частичной линковки, а опцию '-r' для остальных.

--verbose
Вывести версию LD и список поддерживаемых эмуляций линкера; также вывести имена входных файлов, которые могут и не могут быть открыты.

-v -V
Вывести номер версии LD. Опция '-V' также выводит список поддерживаемых эмуляций.

-version
Вывести номер версии LD и завершиться.

-warn-common
Предупреждать, когда общий символ комбинируется с другим общим символом или с определением символа. Линкеры UNIX-а позволяют эту немного избыточную практику, но на других платформах линкеры иногда не позволяют совершать эту операцию. Эта опция позволяет Вам найти потенциальную проблему, возникающую при объединении глобальных символов. К сожалению, некоторые библиотеки Си используют эту практику, так что Вы можете получить предупреждение как для символов в библиотеках, так и в своих программах.

Всего существует три типа глобальных символов:

'int i=1;'
Описание, которое идет в секцию инициализированных данных в выходном файле.

'extern int i;'
Неопределенная ссылка, которая не занимает пространства. Где-нибудь должно существовать другое определение этого символа.

'int i;'
Общий символ. Если существует несколько общих символов для переменной, она идет в секцию неинициализированных данных в выходном файле. Линкер объединяет несколько общих символов, описывающих одну переменную, в один символ. Если они разного размера, он выбирает наибольший. Линкер превращает общий символ в декларацию, если там находится описание той же самой переменной.

Опция '-warn-common' может выдавать пять типов предупреждений; каждое предупреждение состоит из двух строк: первая строка описывает символ, который сейчас обрабатывается, вторая строка описывает предыдущий символ с таким же именем. Один или оба из двух символов будут общим символом.

  1. Превращения общего символа в ссылку, потому что уже существует описаниe символа:
    файл(секция): warning: common of 'символ' overridden by definition файл(секция): warning: defined here
  2. Превращение общего символа в ссылку, потому что позднее встретилось описание символа. Это практически аналогично предыдущему случаю, за исключением того, что символы встретились в другом порядке:
    файл(секция): warning: definition of 'символ' overriding common файл(секция): warning: common is here
  3. Объединение общего символа с предыдущим общим символом такого же размера:
    файл(секция): warning: multiple common of 'символ' файл(секция): warning: previous common is here
  4. Объединение общего символа с предыдущим большим общим символом
    файл(секция): warning: common of 'символ' overridden by larger common файл(секция): warning: larger common is here
  5. Объединение общего символа с предыдущим общим символом меньшего размера. Это аналогично предыдущему случаю, за исключением того, что символы встречаются в другом порядке.
    файл(секция): warning: common of 'символ' overridding smaller common файл(секция): warning: smaller common is here

-warn-constructors
Предупреждать, если используются глобальные конструкторы. Эта опция полезна для весьма ограниченного числа объектных форматов. Для форматов, таких, как СOFF или ELF, линкер не может определить использование глобальных конструкторов.

-warn-once
Предупреждать об обнаружении неопределенного символа только однажды, а не каждый раз при нахождении неопределенного символа в модуле. Для каждой библиотеки, написанной в командной строке, включать каждый объектный файл библиотеки в линковку, а не искать в библиотеке только необходимые объектные файлы. Обычно это используется для превращения библиотеки в разделяемую библиотеку, заставляя каждый объект быть включенным в результирующую разделяемую библиотеку.

-X
Удалять все временные локальные символы. Для большинства архитектур это все локальные символы, имена которых начинаются с буквы 'L'.

-x
Удалять все локальные символы.

-y <символ>
Печатать имя каждого линкуемого файла, в котором этот символ появляется. Эта опция может быть использована неограниченное количество раз. Данная опция полезна, когда у Вас есть неопределенный символ, а Вы не знаете, где находится ссылка на него.

-( <архивы> -) --start-group <архивы> --end-group
Аргументом данной опции является список имен библиотек. Это могут быть либо точные имена файлов, либо опции '-l'. Указанные библиотеки многократно просматриваются, пока не остается ни одной новой неопределенной ссылки. Обычно архивы (библиотеки) просматриваются только один раз - в том порядке, в каком они были указаны в командной строке. Если символ в библиотеке требует ссылки на неопределенный символ, находящий в библиотеке, указанной позднее в командной строке, то линкер не сможет обработать эту ссылку. Группировка библиотек заставляет их все просматриваться многократно, пока все возможные ссылки не будут обработаны. Использование этой опции значительно замедляет работу линкера, поэтому ее рекомендуется использовать только тогда, когда у Вас есть несколько библиотек, которые ссылаются друг на друга.

2.2 Внешние переменные окружения

Вы можете изменить поведение LD с помощью внешней переменной окружения GNUTARGET.

GNUTARGET определяет формат объектного файла, если Вы не использовали опции командной строки '-b' и '-format'. Ее значение должно быть одним из возможных названий форматов объектных файлов, обрабатываемых библитекой BFD (см. 5). Если в окружении нет переменной GNUTARGET, LD использует формат объектного файла, принятый по умолчанию. Если GNUTARGET установлена в DEFAULT, тогда BFD пытается определить формат входного файла путем анализа входных файлов. Обычно этот метод успешен, но возможны некоторые затруднения, так как не существует большой уверенности, что магические числа, используемые для определения формата объектного файла, уникальны. Тем не менее, конфигурационная процедура для BFD на каждой системе помечает формат, принятый по умолчанию для этой системы, первым в списке форматов объектных файлов, среди которых производится поиск, поэтому ошибки при определении формата объектного файла довольно редки.


Вперед Назад Содержание