Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
01.05.2014
Размер:
206.19 Кб
Скачать

Редактор связейld Общие сведения

Редактор связей ldобъединяет несколько указанных в командной строке объектных и архивных файлов, настраивает перемещаемые адреса и разрешает ссылки на символы.

Обычно редактор связей вызывается автоматически драйвером компиляции в качестве последнего прохода обработки для получения выполняемого файла. В распределенной среде разработки, для которой предназначен компилятор СКРВ Багет, компиляция и редактирование связей выполняются раздельно:

bt23b-gcc -O2 -c auto_p.cauto_t.cbt23b-ld -r -o robot_mngr.oauto_p.o auto_t.o

Компилятор используется для получения объектных файлов, а редактор связей — для объединения объектных файлов в один результирующий с разрешением взаимных ссылок на внешние символы.

Редактор связей ldвоспринимает также файлы на командном языке загрузки (Linker Command Language), который представляет собой расширенную версию языка AT&T's Link Editor Command Language и предоставляет явный и полный способ контроля над процессом редактирования связей.

Редактор связей ld использует для манипуляций над объектными файлами библиотеки BFD (Binary File Description). При помощи этих библиотекldможет читать, комбинировать и записывать объектные файлы в различных форматах.

Редактор связей ldобладает повышенной устойчивостью к ошибкам входных данных. Встретив ошибку,ld, во всех случаях когда это возможно, выдает диагностическое сообщение и продолжает выполнение, для того чтобы выдать результирующий файл и максимальный объем диагностики при некорректных исходных данных.

Редактор связей ldразрабатывался с учетом требования максимальной универсальности и максимальной совместимости с другими редакторами связей. Работаldконтролируется опциями командной строки и переменными окружения.

Описание опций

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

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

Обычно ldвызывается с указанием по крайней мере одного исходного объектного файла, но при помощи опций-l, -R, скриптов на языке загрузки, можно задать также другие виды исходных бинарных файлов. Если входные бинарные файлы не заданы, то редактор связей не генерирует выходной файл и завершает работу с выдачей диагностического сообщения “No input files”.

Если редактор не может распознать формат объектного файла, то он предполагает, что это скрипт на языке загрузки. Заданный таким образом скрипт дополняет основной скрипт (используемый по умолчанию или заданный при помощи опции -T). Эта возможность позволяет редактору обрабатывать входной файл, который имеет структуру объектного или архивного, но на самом деле просто определяет некоторые значения символов или содержит INPUT либо GROUP для подсоединения других объектов.

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

Для опций с длинными именами допускается указание одного или двух символов ‘-‘, например, --oformatили-oformat; обе формы допустимы и эквивалентны. Аргумент опции с длинным именем отделяется от нее либо пробельными символами, либо знаком равенства ‘=’. Например, спецификации--oformat srecи--oformat=srecсчитаются эквивалентными.

Допускаются однозначно распознаваемые сокращения длинных имен опций.

-aключ

Эта опция включена для совместимости с HP/UX. Аргумент ключможет принимать значенияarchive,shared,default. Опция-aarchiveфункционально эквивалентна‑Bstatic, а остальные ключи функционально эквивалентны опции-Bdynamic. Опция может использоваться в командной строке несколько раз.

-Aархитектура --architecture=архитектура

В текущей версии ldэта опций полезна только для семейства архитектур Intel 960. В конфигурацииldдля этой платформы аргументархитектура задает конкретный тип архитектуры семейства Intel 960, изменяя соответствующим образом путь поиска библиотек.

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

-bформат_оф--format=формат_оф

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

Аргумент формат_оф задается в виде текстовой строки — имени формата, поддерживаемого библиотеками BFD. Список поддерживаемых платформ можно узнать при помощи командыobjdump -i. Список форматов, поддерживаемых редактором связей (и другими утилитами, входящими в комплект поставки СКРВ Багет):

elf32-bigmips elf32-littlemips elf64-bigmips elf64-littlemips ecoff-bigmips ecoff-littlemips srec symbolsrec tekhex binary ihex

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

Формат по умолчанию определяется значением переменной окружения GNUTARGET. Формат исходных файлов можно определить также в скрипте при помощи команды TARGET.

-cкомандный_файл_MRI--mri-script=командный_файл_MRI

Для совместимости с редакторами связей, порождаемыми MRI, ldвоспринимает также командные файлы на альтернативном ограниченном языке, поддерживаемом MRI. Используйте-cдля указания командных файлов MRI и-Tдля выполнения скриптов на языке загрузкиld. Если указанныйкомандный_файл_MRI не существует, тоldищет его в каталогах, заданных при помощи опций-L.

-d -dc -dp

Все эти опции эквивалентны; три разные формы введены для совместимости с другими редакторами связей. Они обеспечивают выделение памяти для common-символов, даже если (при помощи опции -r) задан перемещаемый формат выходного файла. Для той же цели служит команда языка загрузки FORCE_COMMON_ALLOCATION.

-eвходное_имя --entry=входное_имя

Эта опция служит для явного указания входного имени, с которого должно начинаться выполнение программы.

-E -export-dynamic

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

-F -F формат_оф

Игнорируемая опция. В некоторых старых моделях редакторов связей эта опция использовалась для задания общего формата входных и выходного файлов. В редакторе ldдля задания форматов входных файлов используется опция-b или‑format, а формат результирующего файла задается опцией-oformat, командой языка загрузки TARGET или переменной окружения GNUTARGET. Опция-F сохранена для совместимости со скриптами, написанными для старых версий редактора связей.

--force-exe-suffix

Снабдить выходной файл суффиксом .exe.

Если успешно сгенерированный выходной файл не имеет суффикса .exeили .dll, то эта опция заставит редактор связей скопировать результат в выходной файл с тем же именем и суффиксом .exe. Эта опция полезна при использовании не модифицированных Unix-makefile’ов в среде MS Windows, поскольку некоторые версии Windows не будут выполнять файл без суффикса.exe.

-g

Игнорируется. Включена для совместимости с другими инструментальными средами.

-Gзначение --gpsize=значение

Установить максимальный размер объектов, оптимизируемых при помощи регистра GP, равным указанному значению. Эта опция применима только для форматов типа MIPS ECOFF, ELF, которые поддерживают размещение объектов разных размеров в разных секциях. Для других форматов эта опция игнорируется.

-hимя -soname=имя

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

-i

Выполнить инкрементальное редактирование связей (эквивалентно опции -r).

-lбиблиотека--library=библиотека

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

-Lкаталог_поиска --library-path=каталог_поиска

Добавить указанный каталог_поиска к списку каталогов, в котрыхldбудет искать библиотеки и скрипты. Эта опция может употребляться в командной строке многократно. Каталоги будут просматриваться в том порядке, в котором они заданы в командной строке. Каталоги, заданные в командной строке, просматриваются раньше, чем каталоги поиска, используемые по умолчанию.

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

Каталоги поиска могут также быть заданы при помощи команды SEARCH_DIR в скрипте. Заданные таким образом каталоги поиска просматриваются начиная с момента, когда скрипт встретился в командной строке.

-mэмуляция

Эмулировать редактор связей, заданный параметром эмуляция. Список допустимых режимов эмуляции выдается при использованииldс опцией-Vили--verbose.

-M --print-map

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

-n --nmagic

Установить для секции textрежим доступа только на чтение и пометить выходной файл как NMAGIC, если это возможно.

-N --omagic

Установить для секций text и data режим доступа на чтение и запись. Не выравнивать секцию data по странице. Если для выходного формата поддерживаются магические числа в стиле ОС Unix, то пометить выходной файл как OMAGIC.

-oфайл --output=файл

Вывести результат в указанный файл. Если эта опция отсутствует, то по умолчанию создается файлa.out. Имя выходного файла может также быть задано в скрипте при помощи команды OUTPUT.

-r --relocateable

Сгенерировать перемещаемый выходной файл, т.е. файл, который, в свою очередь, может использоваться как входной аргумент для ld. Эта процедура часто называетсячастичным редактированием связей. В среде, где поддерживаются магические числа, для выходного файла устанавливается магическое число OMAGIC.

В отсутствие этой опции порождается файл с абсолютной настройкой. При редактировании с этой опцией файлов Си++ ссылки на конструкторы небудут разрешены; для этого следует применить опции-Ur.

Эта опция эквивалентна -i.

-Rфайл --just-symbols=файл

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

Для совместимости с другими редакторами связей для ELF-форматов, если после опции -Rуказано имя каталога, а не файла, то она обрабатывается как-rpath.

-s --strip-all

Опустить в выходном файле всю информацию о символах.

-S --strip-debug

Опустить в выходном файле отладочную (но не всю) информацию о символах

-t --trace

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

-T командный_файл --script=командный_файл

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

Если командный_файл не существует, тоldищет его в каталогах, заданных при помощи опций -L. Если задано несколько опций -T, то выполняются все указанные командные файлы.

-u символ --undefined= символ

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

-v —version -V

Показать номер версии ld. Опция-Vпоказывает также список поддерживаемых режимов эмуляции.

-x --discard-all

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

-X --discard-locals

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

-y символ --trace-symbol= символ

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

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

-Yмаршрут

Добавить маршрутк списку поиска. Эта опция существует только для совместимости с Solaris.

-zключ

Игнорируемая опция, включена для совместимости с Solaris.

-(библиотеки -)

--start-groupбиблиотеки--end-group

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

Указанные библиотеки просматриваются многократно, до тех пор, пока не останется неразрешенных ссылок. Обычно библиотека просматривается только один раз, тогда, когда она встречается в командной строке. Если в этой библиотеке есть символ, который нужен для разрешения ссылки из объекта, который встретился позднее, то редактор связей не сможет разрешить такую ссылку. Если задана группа библиотек, то она будет просматриваться многократно, до тех пор пока остается возможность разрешить какие-либо ссылки.

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

-assert ключ

Игнорируемая опция, включена для совместимости с Solaris.

-Bdynamic -dy -call_shared

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

-Bstatic

-dn

-non_shared

-static

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

-Bsymbolic

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

--cref

Вывести таблицу перекрестных ссылок. Если генерируется map-файл, то таблица перекрестных ссылок помещается в этот файл. Иначе она выводится на стандартный вывод.

Формат этой таблицы преднамеренно выбран довольно простым, так чтобы его можно было при необходимости обработать при помощи несложных скриптов или фильтров. Символы упорядочены в алфавитном порядке; для каждого символа выдается список файлов, в которых он упоминается. Если символ определен, то первым в списке приводится файл с определением, остальные файлы в списке содержат ссылки на символ.

--defsymсимвол=выражение

Создать в выходном файле символ, содержащий абсолютный адрес, заданныйвыражением. Данная опция может употребляться в командной строке многократно, если нужно определить таким образом несколько символов. Длявыражений в этом контексте поддерживается ограниченный синтаксис: можно задать шестнадцатеричные константы, имена существующих символов, а также знаки ‘+’ и ‘–‘ для сложения и вычитания. Если требуются более сложные выражения, то следует создать скрипт на языке команд загрузки.

ЗАМЕЧАНИЕ. Пробелы между символом, знаком ‘=’ ивыражением не допускаются.

--dynamic-linker файл

Установить имя динамического редактора связей. Опция имеет смысл только при создании динамически загружаемых выполняемых файлов в формате ELF. Как правило, в конфигурации ldдля такой среды предусмотрено правильное имя динамического загрузчика по умолчанию; поэтому эту опцию следует употреблять только если вы точно знаете, что необходимо другое имя.

-EB

Редактировать объекты с порядком байт big-endian. Эта опция влияет на формат выходного файла.

-EL

Редактировать объекты с порядком байт little-endian. Эта опция влияет на формат выходного файла.

-embedded-relocs

Эта опция имеет смысл только для встроенного PIC-кода MIPS, который генерируется gnu-компилятором и ассемблером для этой платформы при использовании опции ‑membedded-pic. В результате редактор связей создает таблицу, которая может быть использована во время выполнения для перемещения любых данных, статически инициализированных значениями указателей. См. для справок код в каталогеbinutils-2.7/ld/testsuite/ld-empic.

--help

Выдать на стандартный вывод сводку опций командной строки ldи выйти.

-Map файл

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

--no-keep-memory

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

--no-whole-archive

Отключить действие опции --whole-archiveдля последующих библиотечных файлов.

--noinhibit-exec

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

-oformat формат_оф

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

Редактор связей ld, поставляемый в комплекте СКРВ Багет, по умолчанию генерирует файлы в форматеelf32-bigmips.

Аргумент формат_оф должен задавать имя одного из поддерживаемых форматов, список которых можно получить при помощи командыobjdump -i.

-qmagic

Игнорируемая опция, включенная для совместимости с Linux.

-Qy

Игнорируемая опция, включенная для совместимости с SVR4.

--relax

Опция, поддерживаемая для небольшого числа платформ: H8/300, H8/300, Intel 960.

На некоторых платформах --relaxпроизводит глобальную оптимизацию.

Если на данной платформе эта опция не поддерживается, то она воспринимается, но игнорируется.

--retain-symbols-fileфайл

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

Опция --retain-symbols-fileне удаляет неопределенные символы и символы, необходимые для настройки.

Опция может употребляться в командной строке только один раз. Она отменяет действие опций -s,-S.

-rpathкаталог

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

Если в качестве аргумента опции -Rзадано имя каталога, а не файла, то-Rобрабатывается как-rpath.

-rpath-linkкаталог

При использовании ELF (или SunOS) одной разделяемой библиотеке может понадобиться другая. Такая ситуация может иметь место, если в команде ld ‑sharedв качестве входного файла задана разделяемая библиотека.

Если при изготовлении не разделяемого и не перемещаемого файла редактор связей встречает такую зависимость, то он автоматически попытается найти требуемую разделяемую библиотеку и включить ее в выходной файл, если она не подключается явно. В этом случае опции -rpath-linkзадают первое множество каталогов, которые нужно просматривать.

При помощи данной опции можно задать последовательность каталогов поиска, перечислив множество имен, разделенных двоеточиями (‘:’) в одной опции или при помощи нескольких опций -rpath-link.

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

  1. Каталоги, заданные при помощи опции -rpath-link.

  2. Каталоги, заданные при помощи -rpath.Разница между этими опциями заключается в том, что каталоги, заданные при помощи-rpath, включаются в выполняемые файлы, а опция‑rpath‑linkдействует только во время редактирования связей.

  3. В ELF-системах, если не заданы опции -rpathи-rpath-link, то поиск производится в каталогах, заданных при помощи переменной окружения LD_RUN_PATH

  4. В SunOS, если отсутствует -rpath, то поиск производится в каталогах, заданных при помощи-L.

  5. В собственном (не “кросс”) редакторе связей используется содержимое переменной окружения LD_LIBRARY_PATH.

  6. По умолчанию используются каталоги /lib, /usr/lib.

-shared

-Bshareable

Создать разделяемую библиотеку. Поддерживается в настоящее время для ELF, XCOFF и SunOS-платформ.

--sort-common

Эта опция заставляет ldсортировать common-символы по размеру и помещать в соответствующие секции выходного файла. Сначала размещаются символы размером в 1 байт, затем символы размером 2 байта, затем символы размером 4 байта, затем все остальные. Это делается для того чтобы избежать появления промежутков между символами из-за ограничений выравнивания.

--split-by-file

То же, что --split-by-reloc, но для каждого входного файла создается новая секция.

--split-by-relocчисло

Редактор связей будет пытаться создавать дополнтельные секции, так чтобы каждая из них содержала не более указанного числаперемещений. Это бывает полезно при генерации крупных перемещаемых файлов для загрузки в ОС реального времени, где объектные файлы имеют формат COFF, поскольку COFF не поддерживает более чем 65535 перемещений в секции. Отметим, что такой подход не сработает, если объектный формат не поддерживает произвольных секций. Редактор связей не будет разбивать секции входных файлов для того чтобы перераспределить перемещения; поэтому если какая-либо входная секция содержит более чем заданноечислоперемещений, то и выходная секция будет содержать такое же число перемещений.

--stats

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

-traditional-format

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

Редактор ld, поставляемый в комплекте СКРВ Багет, эту опцию игнорирует.

-Tbss адрес

-Tdata адрес

-Ttext адрес

Использовать адрес как начальный адрес для, соответственно, секцийbss, data, text. Аргументадрес задается в виде шестнадцатеричного целого, префикс `0x’ можно опустить.

-Ur

Для программ на Си++ эта опция делает то же, что -rи разрешает ссылки на конструкторы классов. В остальных случаях полностью эквивалентна-r.

--verbose

Показать номер версии ldи список поддерживаемых режимов эмуляции. Показать также встроенный скрипт редактора связей, используемый по умолчанию, если он имеется

-warn-common

Выдавать предупреждения, когда common-символ комбинируется с другим common-символом или с определением символа. Редакторы связей операционных систем, отличных от Unix, не обрабатывают такие комбинации. Эта опция применяется для выявления потенциальных проблем, которые могут возникнуть при переходе на другие платформы.

Имеется три типа глобальных символов, которые проиллюстрированы ниже примерами на языке Си.

int i = 1;

Такое определение попадает в секцию инициализированных данных.

extern int i;

Неопределенная ссылка, под символ, описанный таким образом, память не отводится. Где-либо еще должно существовать либо определение, либо описание common-символа.

int i;

Common-символ. Если некоторой переменной соответствуют только common-символы (один или более), то она попадает в секцию неинициализированных данных. Редактор связей отображает на один символ все common-символы, соответствующие одной программной переменной. Если они имеют различные размеры, то берется максимальный. Если где-либо имеетсяопределениеэтой переменной, то редактор связей преобразует common-символ в декларации.

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

  1. Преобразование common-символа в ссылку, поскольку уже было определение этого символа:

файл(секция): warning: common ofсимвол

overridden by definition

файл(секция): warning: defined here

  1. Преобразование common-символа в ссылку, поскольку позднее встретилось определение этого символа. То же, что предыдущий случай, разница в очередности встретившихся упоминаний символа.

файл(секция): warning: definition ofсимвол

overriding common

файл(секция): warning: common is here

  1. Слияние common-символа с ранее встретившимся common-символом того же размера.

файл(секция): warning: multiple common

of символ

файл(секция): warning: previous common is here

  1. Слияние common-символа с ранее встретившимся common-символом большего размера.

файл(секция): warning: common ofсимвол

overridden by larger common

файл(секция): warning: larger common is here

  1. Слияние common-символа с ранее встретившимся common-символом меньшего размера.

файл(секция): warning: common ofсимвол

overriding smaller common

файл(секция): warning: smaller common is here

-warn-constructors

Предупреждать об использовании глобальных конструкторов. Опция полезна только для некоторых форматов объектных файлов. Для форматов COFF, ELF редактор не может распознать использование глобальных конструкторов.

-warn-multiple-gp

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

-warn-once

Выдавать только одно предупреждение для каждого неопределенного символа, а не для каждого модуля, где встретился такой символ.

--whole-archive

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

--wrap символ

Использовать для символаобрамляющую функцию. Неопределенная ссылка насимволбудет разрешена как__wrap_символ. Неопределенная ссылка на__real_символбудет разрешена каксимвол.

Эта возможность может быть применена для обрамления системных функций. Обрамляющая функция должна иметь имя __wrap_символ. Если в ней нужно вызвать собственно системную функцию, то к ней следует обращаться по имени__real_символ.

Ниже приведен тривиальный пример:

void *

__wrap_malloc (int c)

{

printf ("malloc called with %ld\n", c);

return __real_malloc (c);

}

Если этот файл объединить с другим кодом, используя опцию --wrap malloc, то все обращения кmallocбудут на самом деле преобразованы в обращения к__wrap_malloc.Обращение к__real_mallocвнутри__wrap_malloc соответствует обращению к “настоящей” функцииmalloc.

Возможно, вы захотите также ввести и свое определение функции __real_malloc, так чтобы редактирование связей прошло успешно и без опции–-wrap. В таком случае не следует помещать определение__real_mallocв том же файле, что и__wrap_malloc— иначе ассемблер может разрешить ссылку прежде чем редактор связей получит шанс связать обращение к__real_malloc с системнымmalloc.

Соседние файлы в папке Еще материалы