Это команда aarch64-linux-gnu-ld.bfd, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
ld - компоновщик GNU
СИНТАКСИС
лд [кредита] objfile ...
ОПИСАНИЕ
ld объединяет ряд объектных и архивных файлов, перемещает их данные и связывает символ
использованная литература. Обычно последний шаг в компиляции программы - это запуск ld.
ld принимает файлы командного языка компоновщика, написанные в надмножестве редактора ссылок AT&T
Синтаксис командного языка, обеспечивающий явный и полный контроль над процессом связывания.
Эта страница руководства не описывает командный язык; увидеть ld запись в "инфо" для полной
подробности о командном языке и других аспектах компоновщика GNU.
Эта версия ld использует библиотеки BFD общего назначения для работы с объектными файлами. Этот
позволяет ld для чтения, объединения и записи объектных файлов во многих различных форматах --- для
например, COFF или "a.out". Различные форматы могут быть связаны вместе для создания любых
доступный вид объектного файла.
Помимо своей гибкости, компоновщик GNU более полезен, чем другие компоновщики, обеспечивая
диагностическая информация. Многие компоновщики сразу же прекращают выполнение при обнаружении
ошибка; когда возможно, ld продолжает выполнение, позволяя выявлять другие ошибки
(или, в некоторых случаях, чтобы получить выходной файл, несмотря на ошибку).
Компоновщик GNU ld предназначен для охвата широкого круга ситуаций и максимальной совместимости
по возможности с другими линкерами. В результате у вас есть много возможностей контролировать его
поведение.
ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ
Компоновщик поддерживает множество параметров командной строки, но на практике лишь немногие из них
используются в любом конкретном контексте. Например, частое использование ld это связать
стандартные объектные файлы Unix в стандартной поддерживаемой системе Unix. В такой системе, чтобы
свяжите файл "hello.o":
Я делаю /lib/crt0.o hello.o -lc
Это говорит ld для создания файла с именем выходной в результате связывания файла
"/lib/crt0.o" с "hello.o" и библиотекой "libc.a" из стандартного
поиск по каталогам. (См. Обсуждение -l вариант ниже.)
Некоторые параметры командной строки для ld можно указать в любой точке командной строки.
Однако параметры, относящиеся к файлам, например -l or -T, заставьте файл быть прочитанным в
точка, в которой параметр появляется в командной строке, относительно объектных файлов и
другие параметры файла. Повторение нефайловых опций с другим аргументом будет либо иметь
никакого дальнейшего эффекта или переопределить предыдущие вхождения (те, что слева от команды
линия) этого варианта. Опции, которые могут быть осмысленно указаны более одного раза:
отмечены в описаниях ниже.
Неопциональные аргументы - это объектные файлы или архивы, которые необходимо связать вместе. Они
может следовать, предшествовать или смешиваться с параметрами командной строки, за исключением того, что объектный файл
Аргумент не может быть помещен между опцией и ее аргументом.
Обычно компоновщик вызывается хотя бы с одним объектным файлом, но вы можете указать другой
формы двоичных входных файлов с использованием -l, -R, и командный язык сценария. Если нет двоичный
входные файлы вообще указаны, компоновщик не производит никакого вывода и выдает
сообщение Нет вход файлов.
Если компоновщик не может распознать формат объектного файла, он будет считать, что это
компоновщик скрипта. Указанный таким образом сценарий дополняет основной сценарий компоновщика, используемый для
ссылку (либо сценарий компоновщика по умолчанию, либо тот, который указан с помощью -T). Это
позволяет компоновщику ссылаться на файл, который выглядит как объект или
архив, но на самом деле просто определяет некоторые значения символов или использует "INPUT" или "GROUP" для
загрузить другие объекты. Указание сценария таким образом просто дополняет основной компоновщик
сценарий с дополнительными командами, помещенными после основного сценария; использовать -T возможность заменить
сценарий компоновщика по умолчанию полностью, но обратите внимание на эффект команды «INSERT».
Для параметров, имена которых состоят из одной буквы, аргументы параметра должны следовать за
буква опций без пробелов, или должна быть указана как отдельные аргументы
сразу после того, как они потребуются.
Для параметров, имена которых состоят из нескольких букв, перед символом может стоять один или два тире.
название опции; Например, -символ и --символа следа эквивалентны. Примечание --- там
является одним исключением из этого правила. Варианты с несколькими буквами, которые начинаются со строчной буквы «о»
может предшествовать только два дефиса. Это сделано для того, чтобы избежать путаницы с -o вариант. Так
например -омагия устанавливает имя выходного файла на магия в то время как --омагия устанавливает NMAGIC
флаг на выходе.
Аргументы для многобуквенных параметров должны быть отделены от имени параметра символом
знак равенства, или быть переданными в виде отдельных аргументов сразу после опции, которая
требует их. Например, --символа следа Foo и --trace-symbol = foo эквивалентны.
Принимаются уникальные сокращения названий многобуквенных вариантов.
Примечание: если компоновщик вызывается косвенно, через драйвер компилятора (например, GCC) затем
все параметры командной строки компоновщика должны иметь префикс -Вл, (или как угодно
для конкретного драйвера компилятора) следующим образом:
gcc -Wl, - начальная группа foo.o bar.o -Wl, - конечная группа
Это важно, потому что в противном случае программа драйвера компилятора может незаметно сбросить
параметры компоновщика, приводящие к неверной ссылке. Также может возникнуть путаница при передаче вариантов
которые требуют значений через драйвер, так как использование пробела между опцией и аргументом
действует как разделитель и заставляет драйвер передавать только параметр компоновщику и
аргумент компилятору. В этом случае проще всего использовать соединенные формы обоих
одно- и многобуквенные варианты, такие как:
gcc foo.o bar.o -Wl, -eENTRY -Wl, -Map = a.map
Вот таблица общих переключателей командной строки, принятых компоновщиком GNU:
@файл
Прочтите параметры командной строки из файл. Прочитанные параметры вставляются вместо
оригинал @файл вариант. Если файл не существует или не может быть прочитан, то опция
будут трактоваться буквально, а не удаляться.
Варианты в файл разделены пробелом. Может быть включен пробельный символ
в опции, заключив весь вариант в одинарные или двойные кавычки. Любой
символ (включая обратную косую черту) может быть включен путем добавления префикса к символу, который будет
включены с обратной косой чертой. В файл сам может содержать дополнительные @файл параметры; любой
такие параметры будут обрабатываться рекурсивно.
-a ключевое слово
Этот параметр поддерживается для совместимости с HP / UX. В ключевое слово аргумент должен быть одним из
струны архив, общиеили по умолчанию. -архив функционально эквивалентно
-Бстатический, а два других ключевых слова функционально эквивалентны -Bдинамический. Это
опцию можно использовать любое количество раз.
--аудит АУДИТЛИБ
Добавляет АУДИТЛИБ к записи "DT_AUDIT" динамической секции. АУДИТЛИБ не проверено
для существования, и при этом он не будет использовать DT_SONAME, указанный в библиотеке. Если указано
несколько раз "DT_AUDIT" будет содержать список интерфейсов аудита, разделенных двоеточиями, для
использовать. Если компоновщик находит объект с записью аудита при поиске общего
библиотеки, он добавит соответствующую запись "DT_DEPAUDIT" в выходной файл. Этот
опция имеет смысл только на платформах ELF, поддерживающих интерфейс rtld-audit.
-A архитектура
--architecture =архитектура
В текущем выпуске ld, эта опция полезна только для семейства Intel 960
архитектуры. В этом ld конфигурация, архитектура аргумент определяет
конкретная архитектура в семействе 960, позволяющая обеспечить некоторые меры безопасности и модифицировать
путь поиска библиотеки-архива.
Будущие выпуски ld может поддерживать аналогичные функции для другой архитектуры
семьи.
-b входной формат
--format =входной формат
ld может быть настроен для поддержки более чем одного типа объектных файлов. Если твой ld is
настроенный таким образом, вы можете использовать -b возможность указать двоичный формат для ввода
объектные файлы, следующие за этим параметром в командной строке. Даже когда ld настроен
для поддержки альтернативных форматов объектов обычно не требуется указывать это, так как ld
должен быть настроен на ожидание в качестве формата ввода по умолчанию наиболее обычного формата для каждого
машина. входной формат текстовая строка, имя определенного формата, поддерживаемого
библиотеки BFD. (Вы можете перечислить доступные двоичные форматы с помощью объектный дамп -i.)
Вы можете использовать эту опцию, если вы связываете файлы с необычным двоичным кодом.
формат. Вы также можете использовать -b для явного переключения форматов (при связывании объектных файлов
различных форматов), включив -b входной формат перед каждой группой объектных файлов
в определенном формате.
Формат по умолчанию берется из переменной среды «GNUTARGET».
Вы также можете определить формат ввода из сценария, используя команду «TARGET»;
-c MRI-командный файл
--mri-script =MRI-командный файл
Для совместимости с линкерами, производимыми МРТ, ld принимает файлы сценариев, написанные в
альтернативный, ограниченный командный язык, описанный в файлах сценариев, совместимых с MRI
раздел документации GNU ld. Представьте файлы сценариев МРТ с опцией -c; использовать
-T возможность запускать скрипты компоновщика, написанные в универсальном ld сценариев
язык. Если МРТ-cmdfile не существует, ld ищет его в указанных каталогах
любым -L настройки.
-d
-Округ Колумбия
-дп Эти три варианта эквивалентны; поддерживаются несколько форм для совместимости
с другими линкерами. Они назначают пространство для общих символов, даже если перемещаемый вывод
указан файл (с -r). Команда сценария "FORCE_COMMON_ALLOCATION" имеет
такой же эффект.
--depaudit АУДИТЛИБ
-P АУДИТЛИБ
Добавляет АУДИТЛИБ к записи "DT_DEPAUDIT" динамической секции. АУДИТЛИБ Не
проверяется на наличие, и он не будет использовать DT_SONAME, указанный в библиотеке. Если
указанное несколько раз "DT_DEPAUDIT" будет содержать список аудита, разделенный двоеточиями
интерфейсы для использования. Этот параметр имеет смысл только на платформах ELF, поддерживающих
rtld-audit интерфейс. Параметр -P предоставляется для совместимости с Solaris.
-e запись
--entry =запись
Используйте запись как явный символ для начала выполнения вашей программы, а не
точка входа по умолчанию. Если нет символа с именем запись, компоновщик попытается
разбор запись как число и используйте его как адрес входа (число будет
интерпретируется в базе 10; вы можете использовать ведущий 0x для базы 16 или ведущего 0 для базы
8).
--exclude-libs Lib,Lib, ...
Определяет список архивных библиотек, символы из которых не должны быть автоматически
экспортируется. Имена библиотек могут быть разделены запятыми или двоеточиями. Указание
"--exclude-libs ALL" исключает символы из всех архивных библиотек из автоматического экспорта.
Эта опция доступна только для целевого порта компоновщика i386 PE и для ELF.
целевые порты. Для i386 PE символы, явно перечисленные в файле .def, по-прежнему
экспортируется, независимо от этого параметра. Для портов, нацеленных на ELF, символы, на которые распространяется это
опция будет считаться скрытой.
--exclude-modules-for-implib модуль,модуль, ...
Задает список объектных файлов или членов архива, символы из которых не должны быть
автоматически экспортируется, но следует скопировать оптом в библиотеку импорта
генерируется во время ссылки. Имена модулей могут быть разделены запятыми или
двоеточия и должны точно соответствовать именам файлов, используемым ld открывать файлы; для архива
элементы, это просто имя элемента, но для объектных файлов указанное имя должно
включить и точно сопоставить любой путь, используемый для указания входного файла в компоновщике
командная строка. Эта опция доступна только для целевого порта i386 PE
компоновщик. Символы, явно указанные в файле .def, по-прежнему экспортируются независимо от
этот вариант.
-E
--export-динамический
--no-экспорт-динамический
При создании динамически подключаемого исполняемого файла с помощью -E или
--export-динамический опция заставляет компоновщик добавлять все символы к динамическому символу
стол. Таблица динамических символов - это набор символов, которые видны из динамического
объекты во время выполнения.
Если вы не используете ни один из этих вариантов (или используете --no-экспорт-динамический вариант
восстановить поведение по умолчанию), таблица динамических символов обычно будет содержать только
те символы, на которые ссылается некоторый динамический объект, упомянутый в ссылке.
Если вы используете "dlopen" для загрузки динамического объекта, который должен ссылаться на символы
определяется программой, а не каким-либо другим динамическим объектом, то вы, вероятно,
необходимо использовать эту опцию при связывании самой программы.
Вы также можете использовать динамический список для управления тем, какие символы следует добавлять в
таблица динамических символов, если формат вывода ее поддерживает. См. Описание
--динамический-список.
Обратите внимание, что эта опция специфична для портов, нацеленных на ELF. Цели PE поддерживают аналогичные
функция экспорта всех символов из DLL или EXE; см. описание
--экспорт-все-символы внизу.
-ЭБ Связывайте объекты с прямым порядком байтов. Это влияет на формат вывода по умолчанию.
-EL Связывайте объекты с прямым порядком байтов. Это влияет на формат вывода по умолчанию.
-f имя
--auxilitar =имя
При создании общего объекта ELF установите для внутреннего поля DT_AUXILIARY значение
указанное имя. Это сообщает динамическому компоновщику, что таблица символов общего
объект должен использоваться в качестве вспомогательного фильтра в таблице символов общего объекта
имя.
Если позже вы свяжете программу с этим объектом фильтра, то при запуске
программы динамический компоновщик увидит поле DT_AUXILIARY. Если динамический компоновщик
разрешает любые символы из объекта фильтра, сначала он проверяет, есть ли
определение в общем объекте имя. Если он есть, он будет использоваться вместо
определение в объекте фильтра. Общий объект имя не должно существовать. Таким образом
общий объект имя может использоваться для альтернативной реализации некоторых
функции, возможно, для отладки или для конкретной производительности машины.
Эта опция может быть указана более одного раза. Записи DT_AUXILIARY будут созданы
в том порядке, в котором они появляются в командной строке.
-F имя
--filter =имя
При создании общего объекта ELF установите внутреннее поле DT_FILTER на указанное
имя. Это сообщает динамическому компоновщику, что таблица символов общего объекта, который
создается, должен использоваться в качестве фильтра в таблице символов общего объекта
имя.
Если позже вы свяжете программу с этим объектом фильтра, то при запуске
программы динамический компоновщик увидит поле DT_FILTER. Динамический компоновщик будет
разрешать символы в соответствии с таблицей символов объекта фильтра как обычно, но
фактически будет ссылаться на определения, найденные в общем объекте имя, Таким образом
объект фильтра может использоваться для выбора подмножества символов, предоставленных объектом
имя.
Некоторые старые компоновщики использовали -F вариант во всей цепочке инструментов компиляции для
указание формата объектного файла как для входных, так и для выходных объектных файлов. Компоновщик GNU
использует для этой цели другие механизмы: -b, --формат, --формат варианты,
Команда «TARGET» в сценариях компоновщика и переменная среды «GNUTARGET». GNU
компоновщик проигнорирует -F вариант, если не создается общий объект ELF.
-fini =имя
При создании исполняемого файла ELF или общего объекта вызовите NAME, когда исполняемый файл или
общий объект выгружается путем установки DT_FINI на адрес функции. К
по умолчанию компоновщик использует "_fini" в качестве вызываемой функции.
-g Игнорируется. Предусмотрено для совместимости с другими инструментами.
-G ценностное
--gpsize =ценностное
Установите максимальный размер оптимизируемых объектов с помощью регистра GP равным размер. Это
имеет смысл только для форматов объектных файлов, таких как MIPS ELF, которые поддерживают размещение больших
и мелкие предметы в разные разделы. Это игнорируется для другого объектного файла.
форматов.
-h имя
-soname =имя
При создании общего объекта ELF установите внутреннее поле DT_SONAME в указанное
имя. Когда исполняемый файл связан с общим объектом, который имеет поле DT_SONAME,
затем, когда исполняемый файл запущен, динамический компоновщик попытается загрузить общий
объект, указанный в поле DT_SONAME, а не с использованием имени файла, данного
компоновщик.
-i Выполните инкрементную ссылку (аналогично опции -r).
-init =имя
При создании исполняемого файла ELF или общего объекта вызовите NAME, когда исполняемый файл или
общий объект загружается, устанавливая DT_INIT в адрес функции. К
по умолчанию компоновщик использует "_init" в качестве вызываемой функции.
-l namepec
--library =namepec
Добавьте архив или объектный файл, указанный в namepec к списку файлов для ссылки.
Эту опцию можно использовать любое количество раз. Если namepec имеет форму :имя файла, ld
будет искать в пути к библиотеке файл с именем имя файла, в противном случае он будет искать
путь к библиотеке для файла с именем libnamespec.a.
В системах, поддерживающих разделяемые библиотеки, ld может также искать файлы, отличные от
libnamespec.a. В частности, в системах ELF и SunOS ld будет искать в каталоге
библиотека под названием libnamespec.so перед поиском того, кого зовут libnamespec.a, (По
соглашения, расширение ".so" указывает на разделяемую библиотеку.) Обратите внимание, что это поведение
не относится к :имя файла, который всегда указывает файл с именем имя файла.
Компоновщик будет искать в архиве только один раз, в том месте, где он указан в
командная строка. Если в архиве есть символ, который не был определен в каком-либо объекте
который появился перед архивом в командной строке, компоновщик будет включать
соответствующий файл (ы) из архива. Однако неопределенный символ в объекте
Появление позже в командной строке не заставит компоновщик искать в архиве
.
Смотрите пост в -( вариант, позволяющий заставить компоновщик выполнять поиск в архивах несколько раз.
Вы можете указать один и тот же архив несколько раз в командной строке.
Этот тип поиска в архивах является стандартным для линкеров Unix. Однако если вы
через ld Обратите внимание, что в AIX это отличается от поведения компоновщика AIX.
-L каталог поиска
--library-path =каталог поиска
Добавить путь каталог поиска к списку путей, которые ld будет искать архивные библиотеки и
ld управляющие скрипты. Вы можете использовать эту опцию любое количество раз. Каталоги
ищутся в том порядке, в котором они указаны в командной строке. Справочники
указанные в командной строке ищутся перед каталогами по умолчанию. Все -L
параметры применяются ко всем -l параметры, независимо от порядка, в котором они отображаются.
-L варианты не влияют на то, как ld ищет скрипт компоновщика, если -T опция
указано.
If каталог поиска начинается с "=", затем "=" заменяется на системный корень префикс,
контролируется --sroot параметр или указывается при настройке компоновщика.
Набор по умолчанию для поиска (без указания с помощью -L) зависит от того, какой
режим эмуляции ld используется, а в некоторых случаях также от того, как он был настроен.
Пути также можно указать в сценарии связи с помощью команды «SEARCH_DIR».
Каталоги, указанные таким образом, ищутся в точке, в которой скрипт компоновщика
появляется в командной строке.
-m эмуляция
Подражать эмуляция компоновщик. Вы можете перечислить доступные эмуляции с помощью
--подробный or -V настройки.
Если же линия индикатора -m опция не используется, эмуляция взята из "LDEMULATION"
переменная окружения, если она определена.
В противном случае эмуляция по умолчанию зависит от того, как был настроен компоновщик.
-M
--print-карта
Распечатайте карту ссылок на стандартный вывод. Карта ссылок предоставляет информацию о
ссылка, включая следующее:
· Где объектные файлы отображаются в памяти.
· Как распределяются общие символы.
· Все участники архива, включенные в ссылку, с упоминанием символа,
вызвали привлечение члена архива.
· Значения, присвоенные символам.
Примечание - символы, значения которых вычисляются выражением, которое включает в себя
ссылка на предыдущее значение того же символа может иметь неверный результат
отображается на карте ссылок. Это потому, что компоновщик отбрасывает промежуточные
результатов и сохраняет только окончательное значение выражения. Под такими
при обстоятельствах компоновщик отобразит окончательное значение, заключенное в квадратные скобки.
Так, например, скрипт компоновщика, содержащий:
фу = 1
фу = фу * 4
фу = фу + 8
создаст следующий результат в карте ссылок, если -M используется вариант:
0x00000001 фу = 0x1
[0x0000000c] foo = (foo * 0x4)
[0x0000000c] foo = (foo + 0x8)
Увидеть Expressions для получения дополнительной информации о выражениях в сценариях компоновщика.
-n
--nmagic
Отключите выравнивание страниц по разделам и отключите связывание с общими библиотеками. Если
формат вывода поддерживает магические числа в стиле Unix, пометьте вывод как «NMAGIC».
-N
--омагия
Сделайте разделы текста и данных доступными для чтения и записи. Кроме того, не выравнивайте страницы
сегмент данных и отключите связывание с разделяемыми библиотеками. Если выходной формат
поддерживает магические числа в стиле Unix, пометьте вывод как «OMAGIC». Примечание. Хотя
записываемый текстовый раздел разрешен для целей PE-COFF, он не соответствует
спецификация формата, опубликованная Microsoft.
--но-омагический
Эта опция сводит на нет большинство эффектов -N вариант. Он устанавливает текстовый раздел в
быть доступным только для чтения и принудительно выравнивает сегмент данных по страницам. Примечание - эта опция
не разрешать связывание с разделяемыми библиотеками. Использовать -Bдинамический для этого.
-o выходной
--output =выходной
Используйте выходной как название программы, созданной ld; если этого варианта нет
указано, имя а. выход используется по умолчанию. Команда сценария "OUTPUT" также может
укажите имя выходного файла.
-O уровень
If уровень числовое значение больше нуля ld оптимизирует вывод. Это может
занимает значительно больше времени, и поэтому, вероятно, его следует включать только для последнего
двоичный. На данный момент эта опция влияет только на создание разделяемой библиотеки ELF. Будущее
выпуски компоновщика могут больше использовать эту опцию. Также в настоящее время нет
различие в поведении компоновщика для разных ненулевых значений этой опции.
Опять же, это может измениться в будущих выпусках.
- пуш-состояние
Команда - пуш-состояние позволяет сохранить текущее состояние флагов, управляющих
обработка входного файла, чтобы все они могли быть восстановлены с помощью одного соответствующего
--поп-состояние опцию.
Охватываемые варианты: -Bдинамический, -Бстатический, -дн, -ди, -call_shared,
-non_shared, -статический, -N, -n, - весь архив, --no-весь-архив, -r, -Ур,
--copy-dt-необходимые-записи, --no-copy-dt-необходимые-записи, --по мере необходимости, - не по мере необходимости,
и -a.
Одной из целей для этого варианта являются спецификации для pkg-конфигурация. При использовании с
--libs option все возможные необходимые библиотеки перечислены и затем, возможно, связаны с
все время. Лучше вернуть что-нибудь так:
-Wl, - push-state, - по мере необходимости -libone -libtwo -Wl, - pop-state
Отменяет действие --push-state, восстанавливает предыдущие значения флагов, управляющих
обработка входного файла.
-q
--emit-relocs
Оставьте разделы перемещения и содержимое в полностью связанных исполняемых файлах. Опубликовать ссылку
эта информация может потребоваться инструментам анализа и оптимизации для правильной работы
модификации исполняемых файлов. Это приводит к увеличению размера исполняемых файлов.
В настоящее время эта опция поддерживается только на платформах ELF.
--force-динамический
Заставить выходной файл иметь динамические разделы. Эта опция специфична для VxWorks
целей.
-r
- перемещаемый
Сгенерировать перемещаемый вывод, т.е. сгенерировать выходной файл, который, в свою очередь, может служить
вход в ld. Это часто называют частично связывающий. В качестве побочного эффекта в окружающей среде
которые поддерживают стандартные магические числа Unix, этот параметр также устанавливает
магический номер для "OMAGIC". Если эта опция не указана, абсолютный файл
произведено. При компоновке программ на C ++ эта опция предусматривает разрешить ссылки на
конструкторы; для этого используйте -Ур.
Если входной файл не имеет того же формата, что и выходной файл, частичное связывание
поддерживается только в том случае, если этот входной файл не содержит перемещений. Другой
форматы вывода могут иметь дополнительные ограничения; например, некоторые форматы на основе "a.out"
вообще не поддерживают частичное связывание с входными файлами в других форматах.
Эта опция делает то же самое, что и -i.
-R имя файла
--just-symbols =имя файла
Считывать названия символов и их адреса из имя файла, но не перемещайте его и не включайте
это на выходе. Это позволяет вашему выходному файлу символически ссылаться на абсолютный
области памяти, определенные в других программах. Вы можете использовать эту опцию более чем
один раз.
Для совместимости с другими линкерами ELF, если -R за параметром следует каталог
имя, а не имя файла, оно рассматривается как -rpath опцию.
-s
- полосатая
Пропустите всю символьную информацию из выходного файла.
-S
--strip-debug
Не указывайте информацию о символах отладчика (но не все символы) из выходного файла.
-t
--след
Выведите имена входных файлов как ld обрабатывает их.
-T файл сценария
--script =файл сценария
Используйте файл сценария как скрипт компоновщика. Этот скрипт заменяет ldскрипт компоновщика по умолчанию
(а не добавление к нему), поэтому командный файл должен указать все необходимое для
описать выходной файл. Если файл сценария не существует в текущем каталоге,
"ld" ищет его в каталогах, указанных любыми предыдущими -L параметры. Несколько
-T варианты накапливаются.
-dT файл сценария
--default-script =файл сценария
Используйте файл сценария как сценарий компоновщика по умолчанию.
Этот вариант аналогичен --скрипт вариант, за исключением того, что обработка скрипта
откладывается до тех пор, пока не будет обработана остальная часть командной строки. Это позволяет
варианты размещены после - скрипт по умолчанию параметр в командной строке, чтобы повлиять на
поведение сценария компоновщика, что может быть важно, когда командная строка компоновщика
не могут напрямую контролироваться пользователем. (например, потому что командная строка
построенный другим инструментом, например GCC).
-u символ
--undefined =символ
Форс-мажор символ быть введенным в выходной файл как неопределенный символ. Это может,
например, запускать компоновку дополнительных модулей из стандартных библиотек. -u может быть
повторяется с разными аргументами опций для ввода дополнительных неопределенных символов. Этот
Эта опция эквивалентна команде сценария компоновщика "EXTERN".
Если этот параметр используется для принудительного включения дополнительных модулей в ссылку,
и если символ остается неопределенным по ошибке, то опция
--require-определенный следует использовать вместо
--require-defined =символ
Требовать, чтобы символ определяется в выходном файле. Этот вариант аналогичен варианту
--неопределенный за исключением того, что если символ не определен в выходном файле, то компоновщик
выдаст ошибку и выйдет. Тот же эффект может быть достигнут в сценарии компоновщика, если
используя "EXTERN", "ASSERT" и "DEFINED" вместе. Этот вариант можно использовать несколько раз.
раз, чтобы потребовать дополнительные символы.
-Ур Для всех, кроме программ на C ++, этот параметр эквивалентен -r: он порождает
перемещаемый вывод --- то есть выходной файл, который, в свою очередь, может служить входом для ld. Когда
связывание программ на C ++, -Ур приносит разрешить ссылки на конструкторы, в отличие от -r, Оно делает
не работать использовать -Ур на файлы, которые сами были связаны с -Ур; однажды
таблица конструктора построена, ее нельзя добавить. Использовать -Ур только на последний
частичная ссылка и -r для остальных.
--orphan-handle =РЕЖИМ
Контролируйте, как обрабатываются бесхозные разделы. Секция для сирот - это не специально
упоминается в сценарии компоновщика.
РЕЖИМ может иметь любое из следующих значений:
"место"
Сиротские разделы помещаются в подходящий выходной раздел в соответствии со стратегией
описанный в Сирота Разделы. Опция --уникальный также влияет на то, как разделы
размещены.
"отказаться"
Все лишние разделы удаляются, помещая их в /ОТКАЗАТЬСЯ/ .
"предупреждать"
Компоновщик поместит потерянный раздел как «место», а также выдаст предупреждение.
"ошибка"
Компоновщик завершит работу с ошибкой, если будет обнаружен какой-либо потерянный раздел.
По умолчанию, если - обращение с сиротами не дано это «место».
--уникальный [=РАЗДЕЛ]
Создает отдельный раздел вывода для каждого совпадения раздела ввода РАЗДЕЛ, или если
необязательный подстановочный знак РАЗДЕЛ аргумент отсутствует для каждого раздела ввода-сироты. An
Сиротский раздел - это тот, который специально не упоминается в сценарии компоновщика. Вы можете использовать это
опцию несколько раз в командной строке; Это предотвращает нормальное слияние ввода
разделы с одинаковыми именами, переопределяющие назначения выходных разделов в сценарии компоновщика.
-v
--версия
-V Показать номер версии для ld, -V option также перечисляет поддерживаемые эмуляции.
-x
--discard-все
Удалите все локальные символы.
-X
--discard-locals
Удалите все временные локальные символы. (Эти символы начинаются с локальных
префиксы меток, обычно .L для систем ELF или L для традиционных систем a.out.)
-y символ
--trace-symbol =символ
Выведите имя каждого связанного файла, в котором символ появляется. Этот вариант может быть предоставлен
любое количество раз. Во многих системах необходимо добавлять подчеркивание.
Эта опция полезна, если в вашей ссылке есть неопределенный символ, но вы не знаете
откуда взялась ссылка.
-Y путь
Добавить путь на путь поиска библиотеки по умолчанию. Эта опция существует для Solaris
Совместимость.
-z ключевое слово
Распознаваемые ключевые слова:
Combreloc
Объединяет несколько разделов перемещения и сортирует их для динамического поиска символов
возможно кеширование.
определение
Запрещает неопределенные символы в объектных файлах. Неопределенные символы в общих
библиотеки по-прежнему разрешены.
исполнительный стек
Помечает объект как требующий исполняемого стека.
Глобальный
Этот параметр имеет смысл только при создании общего объекта. Это делает
символы, определенные этим общим объектом, доступны для разрешения символов
впоследствии загруженные библиотеки.
initfirst
Этот параметр имеет смысл только при создании общего объекта. Он отмечает объект
так что его инициализация среды выполнения произойдет до инициализации среды выполнения
любые другие объекты, включенные в процесс одновременно. Аналогичным образом
завершение выполнения объекта произойдет после завершения выполнения
любые другие предметы.
вставлять
Помечает объект, который его таблица символов вставляет перед всеми символами, кроме
основной исполняемый файл.
ленивый
При создании исполняемой или разделяемой библиотеки отметьте ее, чтобы сообщить динамической
компоновщик, чтобы отложить разрешение вызова функции до момента, когда функция вызывается
(ленивая привязка), а не во время загрузки. По умолчанию используется ленивая привязка.
loadfltr
Помечает объект, что его фильтры обрабатываются немедленно во время выполнения.
Muldefs
Допускает несколько определений.
Nocombreloc
Отключает объединение нескольких секций перемещения.
нокопирелок
Отключить сгенерированные компоновщиком переменные .dynbss, используемые вместо переменных, определенных в
общие библиотеки. Может привести к динамическому перемещению текста.
Nodefaultlib
Помечает объект, что поиск зависимостей этого объекта будет игнорировать любые
пути поиска библиотеки по умолчанию.
ноделет
Отмечает, что объект нельзя выгружать во время выполнения.
кивать
Помечает объект как недоступный для «dlopen».
кувыркающийся
Отмечает, что объект не может быть сброшен с помощью "dldump".
стек noexec
Помечает объект как не требующий исполняемого стека.
текст
Считать DT_TEXTREL в общем объекте ошибкой.
нет текста
Не рассматривайте DT_TEXTREL в общем объекте как ошибку.
текст
Не рассматривайте DT_TEXTREL в общем объекте как ошибку.
Норелро
Не создавайте заголовок сегмента ELF "PT_GNU_RELRO" в объекте.
сейчас При создании исполняемой или разделяемой библиотеки отметьте ее, чтобы сообщить динамической
компоновщик для разрешения всех символов при запуске программы или когда общий
библиотека связана с использованием dlopen вместо откладывания разрешения вызова функции
до момента, когда функция вызывается впервые.
происхождения
Отмечает, что объект может содержать $ ORIGIN.
Relro
Создайте заголовок сегмента ELF "PT_GNU_RELRO" в объекте.
максимальный размер страницы =ценностное
Установите максимальный размер страницы эмуляции на ценностное .
общий размер страницы =ценностное
Установите общий размер страницы эмуляции на ценностное .
размер стека =ценностное
Укажите размер стека в сегменте ELF «PT_GNU_STACK». Указание нулевой воли
переопределить любое создание сегмента "PT_GNU_STACK" ненулевого размера по умолчанию.
бндплт
Всегда генерируйте префикс BND в записях PLT. Поддерживается для Linux / x86_64.
noextern-protected-данные
Не обрабатывайте защищенный символ данных как внешний при построении общей библиотеки. Этот
опция переопределяет бэкэнд компоновщика по умолчанию. Его можно использовать для обхода неправильного
перемещения относительно защищенных символов данных, генерируемых компилятором. Обновления на
защищенные символы данных другим модулем не видны получившимся общим
библиотека. Поддерживается для i386 и x86-64.
call-nop = адрес-префикса
call-nop = префикс-nop
call-nop = суффикс-nop
call-nop = префикс-байт
call-nop = суффикс-байт
Укажите 1-байтовое заполнение «NOP» при преобразовании косвенного вызова в локальный
определенную функцию foo через ее слот GOT. call-nop = адрес-префикса генерирует "0x67
call foo ". call-nop = префикс-nop генерирует «0x90 call foo». call-nop = суффикс-nop
генерирует "call foo 0x90". call-nop = префикс-байт генерирует "байт призывают фу ".
call-nop = суффикс-байт генерирует "call foo" байт". Поддерживается для i386 и x86_64.
Другие ключевые слова игнорируются для совместимости с Solaris.
-( архивам -)
--старт-группа архивам --конечная группа
Команда архивам должен быть список архивных файлов. Они могут быть либо явным файлом
имена, или -l настройки.
В указанных архивах выполняется многократный поиск до тех пор, пока не перестанут быть новые неопределенные ссылки.
созданный. Обычно поиск в архиве выполняется только один раз в указанном порядке.
в командной строке. Если символ в этом архиве необходим для разрешения неопределенной
символ, на который ссылается объект в архиве, который появляется позже в командной строке,
компоновщик не сможет разрешить эту ссылку. Группируя архивы,
все они будут подвергаться многократному поиску, пока не будут разрешены все возможные ссылки.
Использование этой опции требует значительных затрат производительности. Лучше всего использовать его только тогда, когда
между двумя или более архивами неизбежны циклические ссылки.
--accept-unknown-input-arch
--no-accept-unknown-input-arch
Указывает компоновщику принимать входные файлы, архитектура которых не может быть распознана. В
предполагается, что пользователь знает, что делает, и намеренно хочет связать
в этих неизвестных входных файлах. Это было поведение компоновщика по умолчанию, до
выпуск 2.14. По умолчанию, начиная с версии 2.14, такой ввод отклоняется.
файлы, и так --accept-unknown-input-arch добавлена опция восстановления старого
поведение.
--по мере необходимости
- не по мере необходимости
Эта опция влияет на теги ELF DT_NEEDED для динамических библиотек, упомянутых в команде.
строка после --по мере необходимости вариант. Обычно компоновщик добавляет тег DT_NEEDED для
каждая динамическая библиотека, упомянутая в командной строке, независимо от того,
действительно нужно или нет. --по мере необходимости заставляет тег DT_NEEDED генерироваться только для
библиотека, которая at который точка in ссылке. удовлетворяет неслабому неопределенному символу
ссылка из обычного объектного файла или, если библиотека не найдена в DT_NEEDED
списки других необходимых библиотек, неслабая неопределенная символьная ссылка из другого
нужна динамическая библиотека. Объектные файлы или библиотеки, появляющиеся в командной строке после
рассматриваемая библиотека не влияет на то, рассматривается ли библиотека как необходимая. Это
аналогично правилам извлечения объектных файлов из архивов. - не по мере необходимости
восстанавливает поведение по умолчанию.
--добавить-необходимо
--no-add-required
Эти два варианта устарели из-за схожести их названий с
--по мере необходимости и - не по мере необходимости параметры. Их заменили
--copy-dt-необходимые-записи и --no-copy-dt-необходимые-записи.
-утверждать ключевое слово
Эта опция игнорируется для совместимости с SunOS.
-Bдинамический
-ди
-call_shared
Ссылка на динамические библиотеки. Это имеет значение только на платформах, для которых общий
библиотеки поддерживаются. Эта опция обычно используется по умолчанию на таких платформах. В
разные варианты этой опции предназначены для совместимости с различными системами. Вы можете
используйте эту опцию несколько раз в командной строке: это влияет на поиск библиотек
-l варианты, которые следуют за ним.
-Bгруппа
Установите флаг «DF_1_GROUP» в записи «DT_FLAGS_1» в динамической секции. Этот
заставляет компоновщик среды выполнения обрабатывать поиск в этом объекте и его зависимости
исполняется только внутри группы. --unresolved-symbols = отчет-все подразумевается. Этот
опция имеет смысл только на платформах ELF, которые поддерживают разделяемые библиотеки.
-Бстатический
-дн
-non_shared
-статический
Не связывайтесь с разделяемыми библиотеками. Это имеет значение только на платформах, для которых
разделяемые библиотеки поддерживаются. Различные варианты этой опции предназначены для
совместимость с различными системами. Вы можете использовать эту опцию несколько раз на
командная строка: влияет на поиск в библиотеке -l варианты, которые следуют за ним. Этот
вариант также подразумевает --unresolved-symbols = отчет-все. Эта опция может использоваться с
-общий. Это означает, что общая библиотека создается, но все
внешние ссылки библиотеки должны быть разрешены путем извлечения записей из статических
библиотеки.
-Бисимволический
При создании разделяемой библиотеки привяжите ссылки к глобальным символам к определению.
в общей библиотеке, если таковая имеется. Обычно это возможно для связанной программы
против общей библиотеки, чтобы переопределить определение в общей библиотеке. Этот
вариант также можно использовать с --export-динамический вариант, при создании позиции
независимый исполняемый файл, чтобы связать ссылки на глобальные символы с определением внутри
исполняемый файл. Этот параметр имеет смысл только на платформах ELF, которые поддерживают общий доступ.
библиотеки и исполняемые файлы, не зависящие от положения.
-Bsymbolic-функции
При создании разделяемой библиотеки привяжите ссылки на глобальные функциональные символы к
определение в общей библиотеке, если таковая имеется. Эту опцию также можно использовать с
--export-динамический опция при создании независимого от позиции исполняемого файла для привязки
ссылки на глобальные функциональные символы для определения в исполняемом файле. Этот
опция имеет смысл только на платформах ELF, которые поддерживают разделяемые библиотеки и положение
независимые исполняемые файлы.
--dynamic-list =файл динамического списка
Укажите для компоновщика имя файла динамического списка. Обычно это используется, когда
создание разделяемых библиотек для определения списка глобальных символов, ссылки на которые
не должны быть привязаны к определению в общей библиотеке или создавать
динамически связанные исполняемые файлы, чтобы указать список символов, которые должны быть добавлены к
таблица символов в исполняемом файле. Эта опция имеет смысл только на платформах ELF.
которые поддерживают разделяемые библиотеки.
Формат динамического списка такой же, как у узла версии без области действия и узла.
имя. Видеть Версия чтобы получить больше информации.
--динамический-список-данные
Включите все символы глобальных данных в динамический список.
--dynamic-list-cpp-новый
Предоставьте встроенный динамический список для операторов C ++ new и delete. В основном это полезно
для создания разделяемого libstdc ++.
--динамический-список-cpp-информация о типе
Предоставьте встроенный динамический список для идентификации типа среды выполнения C ++.
--check-разделы
--no-check-разделы
Спрашивает компоновщик чтобы проверить адреса разделов после того, как они были назначены, чтобы увидеть,
есть какие-то совпадения. Обычно компоновщик выполняет эту проверку, и если он находит
любое перекрытие приведет к появлению соответствующих сообщений об ошибках. Компоновщик знает и
делает поправки на разделы в накладках. Поведение по умолчанию можно восстановить
с помощью переключателя командной строки --check-разделы. Перекрытие секций обычно не
проверил на наличие перемещаемых ссылок. В этом случае вы можете принудительно проверить, используя
--check-разделы опцию.
--copy-dt-необходимые-записи
--no-copy-dt-необходимые-записи
Этот параметр влияет на обработку динамических библиотек, на которые ссылаются теги DT_NEEDED.
внутри Динамические библиотеки ELF, упомянутые в командной строке. Обычно компоновщик не
добавить тег DT_NEEDED в выходной двоичный файл для каждой библиотеки, упомянутой в теге DT_NEEDED
во входной динамической библиотеке. С участием --copy-dt-необходимые-записи указано в команде
строка, однако любые динамические библиотеки, которые следуют за ней, будут иметь свои записи DT_NEEDED
добавлен. Поведение по умолчанию можно восстановить с помощью --no-copy-dt-необходимые-записи.
Этот параметр также влияет на разрешение символов в динамических библиотеках.
В --copy-dt-необходимые-записи динамические библиотеки, упомянутые в командной строке, будут
рекурсивный поиск, следуя их тегам DT_NEEDED в другие библиотеки, чтобы
разрешить символы, необходимые для выходного двоичного файла. Однако с настройкой по умолчанию
поиск следующих за ним динамических библиотек остановится на динамической библиотеке
сам. Для разрешения символов переход по ссылкам DT_NEEDED не выполняется.
--креф
Выведите таблицу перекрестных ссылок. Если создается файл карты компоновщика, крестик
справочная таблица распечатывается в файл карты. В противном случае он печатается на стандартном
вывод.
Формат таблицы намеренно прост, чтобы ее можно было легко обработать
скрипт при необходимости. Символы распечатываются и сортируются по имени. Для каждого символа
дается список имен файлов. Если символ определен, первым перечисленным файлом будет
расположение определения. Если символ определен как общее значение, то любые файлы
где это происходит, появятся далее. Наконец, все файлы, которые ссылаются на этот символ,
в списке.
--no-define-общий
Эта опция запрещает присвоение адресов общим символам. Сценарий
команда "INHIBIT_COMMON_ALLOCATION" имеет тот же эффект.
Команда --no-define-общий опция позволяет развязать решение о присвоении адресов
Общие символы из выбора типа выходного файла; в противном случае неперемещаемый
Тип выхода принудительно присваивает адреса Общим символам. С использованием --no-define-общий
позволяет назначать общие символы, на которые есть ссылки из общей библиотеки
адреса только в основной программе. Это устраняет неиспользуемое повторяющееся пространство в
разделяемая библиотека, а также предотвращает любую возможную путаницу при разрешении неправильного
дублировать, когда есть много динамических модулей со специализированными путями поиска для
разрешение символа времени выполнения.
--defsym =символ=выражение
Создайте глобальный символ в выходном файле, содержащий абсолютный адрес, заданный
выражение. Вы можете использовать эту опцию столько раз, сколько необходимо, чтобы определить несколько
символы в командной строке. Ограниченная форма арифметики поддерживается для
выражение в этом контексте: вы можете указать шестнадцатеричную константу или имя
существующий символ, или используйте "+" и "-" для добавления или вычитания шестнадцатеричных констант или
символы. Если вам нужны более сложные выражения, рассмотрите возможность использования команды компоновщика
язык из сценария. Примечание: между ними не должно быть пробелов символ,
знак равенства ("="), а также выражение.
--demangle [=стиль]
--no-разбирать
Эти параметры определяют, следует ли разбирать имена символов в сообщениях об ошибках и других
выход. Когда компоновщику приказывают разобрать запутывание, он пытается представить имена символов в
читаемый способ: он удаляет начальные подчеркивания, если они используются объектным файлом
формат и преобразует искаженные имена символов C ++ в имена, читаемые пользователем. Другой
компиляторы имеют разные стили искажения. Необязательный аргумент стиля разборки может
использоваться для выбора подходящего стиля разборки для вашего компилятора. Компоновщик будет
demangle по умолчанию, если переменная среды COLLECT_NO_DEMANGLE установлен. Эти
параметры могут использоваться для отмены значения по умолчанию.
-Iфайл
--dynamic-linker =файл
Задайте имя динамического компоновщика. Это имеет смысл только при генерации
динамически связанные исполняемые файлы ELF. Обычно используется динамический компоновщик по умолчанию;
не используйте это, если вы не знаете, что делаете.
--no-динамический компоновщик
При создании исполняемого файла опустите запрос на использование динамического компоновщика в
время загрузки. Это имеет значение только для исполняемых файлов ELF, которые содержат динамические
перемещений, и обычно требуется код точки входа, который способен обрабатывать эти
переезды.
--фатальные-предупреждения
--нет-фатальных-предупреждений
Считайте все предупреждения ошибками. Поведение по умолчанию можно восстановить с помощью параметра
--нет-фатальных-предупреждений.
--force-exe-суффикс
Убедитесь, что выходной файл имеет суффикс .exe.
Если у успешно созданного полностью связанного выходного файла нет файлов «.exe» или «.dll»
суффикс, этот параметр заставляет компоновщик копировать выходной файл в одноименный
с суффиксом ".exe". Эта опция полезна при использовании немодифицированных make-файлов Unix на
Хост Microsoft Windows, поскольку некоторые версии Windows не запускают образ, если он
оканчивается суффиксом «.exe».
--gc-разделы
--no-gc-разделы
Включите сборку мусора неиспользуемых входных секций. Он игнорируется для целей, которые
не поддерживаю этот вариант. Поведение по умолчанию (не выполнять этот мусор
collection) можно восстановить, указав --no-gc-разделы в командной строке. Примечание
сборка мусора для целевых форматов COFF и PE поддерживается, но
реализация в настоящее время считается экспериментальной.
--gc-разделы решает, какие входные разделы используются, исследуя символы и
переезды. Раздел, содержащий символ записи, и все разделы, содержащие
символы, не определенные в командной строке, будут сохранены, как и разделы, содержащие
символы, на которые ссылаются динамические объекты. Обратите внимание, что при создании общих библиотек
компоновщик должен предполагать, что имеется ссылка на любой видимый символ. Как только этот первоначальный набор
были определены разделы, компоновщик рекурсивно помечает как использованные любой раздел
ссылаются на их перемещения. Видеть --Вход и --неопределенный.
Эта опция может быть установлена при частичном связывании (включается опцией -r). В этом
случае корень сохраняемых символов должен быть явно указан либо --Вход or
--неопределенный или командой «ENTRY» в сценарии компоновщика.
--print-gc-разделы
--no-print-gc-section
Список всех разделов, удаленных сборкой мусора. Список напечатан на stderr.
Этот параметр эффективен только в том случае, если сборка мусора была включена через
--gc-разделы) вариант. Поведение по умолчанию (не перечисление разделов, которые
удалено) можно восстановить, указав --no-print-gc-section в командной строке.
- формат вывода на печать
Напечатайте имя формата вывода по умолчанию (возможно, на него повлияла другая командная строка
параметры). Это строка, которая появится в сценарии компоновщика "OUTPUT_FORMAT".
команда.
--print-использование-памяти
Распечатайте используемый размер, общий размер и используемый размер областей памяти, созданных с помощью ПАМЯТЬ
команда. Это полезно для встроенных целей для быстрого просмотра количества свободных
объем памяти. Формат вывода включает один заголовок и одну строку на регион. это
как читаемые человеком, так и легко анализируемые инструментами. Вот пример вывода:
Используемая область памяти Размер области Размер% использованного возраста
ПЗУ: 256 КБ 1 МБ 25.00%
Оперативная память: 32 B 2 ГБ 0.00%
--Помогите
Распечатайте сводку параметров командной строки в стандартный вывод и выйдите.
--target-помощь
Распечатайте сводку всех целевых опций на стандартный вывод и выйдите.
-Карта =файл карты
Распечатать карту ссылок на файл файл карты. См. Описание -M вариант выше.
--нет-сохранять-память
ld обычно оптимизирует скорость по сравнению с использованием памяти, кэшируя таблицы символов
входные файлы в памяти. Эта опция сообщает ld вместо этого оптимизировать использование памяти,
при необходимости перечитать таблицы символов. Это может потребоваться, если ld заканчивается
пространство памяти при компоновке большого исполняемого файла.
--no-не определено
-z определение
Сообщайте о неразрешенных ссылках на символы из обычных объектных файлов. Это делается, даже если
компоновщик создает несимвольную общую библиотеку. Выключатель
- [no-] allow-shlib-undefined контролирует поведение при сообщении о неразрешенных
ссылки, найденные в разделяемых библиотеках, в которых есть ссылки.
--allow-множественное определение
-z Muldefs
Обычно, когда символ определяется несколько раз, компоновщик сообщает о фатальном
ошибка. Эти параметры позволяют использовать несколько определений, и будет использоваться первое определение.
--allow-shlib-unопределенный
--no-allow-shlib-не определено
Разрешает или запрещает неопределенные символы в общих библиотеках. Этот переключатель похож на
--no-не определено за исключением того, что он определяет поведение, когда неопределенные символы
в общей библиотеке, а не в обычном объектном файле. Это не влияет на то, как
обрабатываются неопределенные символы в обычных объектных файлах.
Поведение по умолчанию - сообщать об ошибках для любых неопределенных символов, указанных в
разделяемые библиотеки, если компоновщик используется для создания исполняемого файла, но разрешает
их, если компоновщик используется для создания общей библиотеки.
Причины для разрешения неопределенных ссылок на символы в разделяемых библиотеках, указанных в
время ссылки таково:
· Общая библиотека, указанная во время компоновки, может не совпадать с
доступен во время загрузки, поэтому символ может быть разрешен во время загрузки.
· Есть некоторые операционные системы, например BeOS и HPPA, где неопределенные символы в
разделяемые библиотеки нормальные.
Ядро BeOS, например, исправляет общие библиотеки во время загрузки, чтобы выбрать
какая функция больше всего подходит для текущей архитектуры. Это
используется, например, для динамического выбора соответствующей функции memset.
--no-undefined-версия
Обычно, когда у символа есть неопределенная версия, компоновщик игнорирует ее. Этот
опция запрещает символы с неопределенной версией, и будет выдана фатальная ошибка
.
--default-symver
Создайте и используйте версию символа по умолчанию (soname) для неверсированных экспортируемых символов.
--default-import-symver
Создайте и используйте версию символа по умолчанию (soname) для неверсированных импортированных символов.
--нет-предупреждать-несоответствие
Обычная стоимость ld выдаст ошибку, если вы попытаетесь связать вместе входные файлы, которые
по какой-то причине не совпадают, возможно, потому, что они были скомпилированы для разных
процессоров или для разных порядков байтов. Эта опция сообщает ld что это должно
молча разрешите такие возможные ошибки. Эту опцию следует использовать с осторожностью, в
случаи, когда вы предприняли какое-то специальное действие, которое гарантирует, что ошибки компоновщика
неуместно.
--no-warn-поиск-несоответствие
Обычная стоимость ld выдаст предупреждение, если обнаружит несовместимую библиотеку во время библиотеки
поиск. Эта опция отключает предупреждение.
--no-весь-архив
Отключите эффект - весь архив вариант для последующих архивных файлов.
--noinhibit-exec
Сохраняйте исполняемый выходной файл, когда его еще можно использовать. Обычно линкер
не будет создавать выходной файл, если он обнаружит ошибки во время процесса связывания; Это
завершается без записи выходного файла при возникновении какой-либо ошибки.
-nostdlib
Искать только в каталогах библиотеки, явно указанных в командной строке. Библиотека
каталоги, указанные в сценариях компоновщика (включая сценарии компоновщика, указанные в
командная строка) игнорируются.
--oformat =Формат вывода
ld может быть настроен для поддержки более чем одного типа объектных файлов. Если твой ld is
настроенный таким образом, вы можете использовать --формат возможность указать двоичный формат для
выходной объектный файл. Даже когда ld настроен для поддержки альтернативного объекта
форматы, вам обычно не нужно указывать это, так как ld должен быть настроен на производство
в качестве формата вывода по умолчанию - самый обычный формат на каждой машине. Формат вывода - это
текстовая строка, имя определенного формата, поддерживаемого библиотеками BFD. (Вы можете
перечислить доступные двоичные форматы с помощью объектный дамп -i.) Команда сценария
«OUTPUT_FORMAT» также может указывать формат вывода, но этот параметр имеет приоритет над ним.
-пирог
--pic-исполняемый файл
Создайте независимый от позиции исполняемый файл. В настоящее время это поддерживается только в ELF.
платформы. Независимые от позиции исполняемые файлы похожи на разделяемые библиотеки в том, что
они перемещаются динамическим компоновщиком на виртуальный адрес, который ОС выбирает для
их (которые могут варьироваться между вызовами). Как обычные динамически связанные исполняемые файлы
они могут быть выполнены, а символы, определенные в исполняемом файле, не могут быть заменены
общие библиотеки.
-qмагия
Эта опция игнорируется для совместимости с Linux.
-Ку Эта опция игнорируется для совместимости с SVR4.
--расслабляться
- не расслабляйся
Вариант с машинно-зависимыми эффектами. Эта опция поддерживается только на некоторых
целей.
На некоторых платформах --расслабляться опция выполняет целевую глобальную оптимизацию
это становится возможным, когда компоновщик разрешает адресацию в программе, например
расслабление адресных режимов, синтез новых инструкций, выбор более короткой версии
текущие инструкции и комбинирование постоянных значений.
На некоторых платформах эта глобальная оптимизация времени компоновки может приводить к символьной отладке
получившийся исполняемый файл невозможно. Это, как известно, относится к Matsushita.
Семейство процессоров MN10200 и MN10300.
На платформах, где это не поддерживается, --расслабляться принимается, но игнорируется.
На платформах, где --расслабляться принимается вариант - не расслабляйся можно использовать для отключения
особенность.
--retain-symbols-file =имя файла
сохранить Важно символы, перечисленные в файле имя файла, отбрасывая все остальные. имя файла
представляет собой простой файл с одним именем символа в строке. Этот вариант особенно
полезен в средах (таких как VxWorks), где большая глобальная таблица символов
накапливается постепенно, чтобы сохранить оперативную память.
--retain-файл-символов приносит отбросить неопределенные символы или символы, необходимые для
переезды.
Вы можете только указать --retain-файл-символов один раз в командной строке. Это отменяет -s
и -S.
-rpath =директория
Добавьте каталог в путь поиска библиотеки времени выполнения. Используется при компоновке ELF
исполняемый файл с общими объектами. Все -rpath аргументы объединяются и передаются в
компоновщик среды выполнения, который использует их для поиска общих объектов во время выполнения. В -rpath
опция также используется при нахождении общих объектов, которые необходимы разделяемым объектам.
явно включены в ссылку; см. описание -rpath-ссылка вариант. Если
-rpath не используется при компоновке исполняемого файла ELF, содержимое окружения
переменная "LD_RUN_PATH" будет использоваться, если она определена.
Команда -rpath опция также может использоваться в SunOS. По умолчанию в SunOS компоновщик
сформировать путь поиска во время выполнения из всех -L вариантов дано. Если -rpath вариант
, путь поиска во время выполнения будет формироваться исключительно с использованием -rpath вариантов,
игнорируя -L параметры. Это может быть полезно при использовании gcc, который добавляет много -L
параметры, которые могут быть в файловых системах, смонтированных по NFS.
Для совместимости с другими линкерами ELF, если -R за параметром следует каталог
имя, а не имя файла, оно рассматривается как -rpath опцию.
-rpath-ссылка =директория
При использовании ELF или SunOS для одной разделяемой библиотеки может потребоваться другая. Это происходит, когда
Ссылка "ld -shared" включает общую библиотеку в качестве одного из входных файлов.
Когда компоновщик сталкивается с такой зависимостью при выполнении не разделяемого, не перемещаемого
ссылка, он автоматически попытается найти требуемую общую библиотеку и включить ее
в ссылке, если она не указана явно. В таком случае -rpath-ссылка вариант
указывает первый набор каталогов для поиска. В -rpath-ссылка опция может указывать
последовательность имен каталогов, указав список имен, разделенных символом
двоеточия или появлением несколько раз.
Этот параметр следует использовать с осторожностью, поскольку он переопределяет путь поиска, который может иметь
были жестко скомпилированы в общую библиотеку. В таком случае можно использовать
непреднамеренно другой путь поиска, чем мог бы сделать компоновщик среды выполнения.
Компоновщик использует следующие пути поиска для поиска необходимых разделяемых библиотек:
1. Любые каталоги, указанные -rpath-ссылка настройки.
2. Любые каталоги, указанные -rpath параметры. Разница между -rpath и
-rpath-ссылка это каталоги, указанные -rpath варианты включены в
исполняемый файл и используется во время выполнения, тогда как -rpath-ссылка вариант только эффективен
во время ссылки. Searching -rpath таким образом поддерживается только собственными компоновщиками и
кросс-линкеры, которые были настроены с --with-sysroot опцию.
3. В системе ELF для собственных компоновщиков, если -rpath и -rpath-ссылка варианты были
не используется, ищите содержимое переменной среды "LD_RUN_PATH".
4. В SunOS, если -rpath опция не использовалась, поиск в любых указанных каталогах
через -L настройки.
5. Для встроенного компоновщика найдите содержимое переменной среды.
"LD_LIBRARY_PATH".
6. Для собственного компоновщика ELF каталоги в "DT_RUNPATH" или "DT_RPATH" общего
библиотека ищет необходимые ей разделяемые библиотеки. Записи "DT_RPATH"
игнорируется, если существуют записи "DT_RUNPATH".
7. Каталоги по умолчанию, обычно / Lib и / USR / Lib.
8. Для встроенного компоновщика в системе ELF, если файл /etc/ld.so.conf существует, список
каталогов, найденных в этом файле.
Если требуемая разделяемая библиотека не найдена, компоновщик выдаст предупреждение и
перейти по ссылке.
-общий
-BShareable
Создайте общую библиотеку. В настоящее время это поддерживается только в ELF, XCOFF и SunOS.
платформы. В SunOS компоновщик автоматически создаст общую библиотеку, если -e
опция не используется и в ссылке есть неопределенные символы.
--sort-common
--sort-common = по возрастанию
--sort-common = по убыванию
Эта опция сообщает ld отсортировать общие символы по выравниванию по возрастанию или
в порядке убывания, когда он помещает их в соответствующие выходные разделы. Символ
Рассматриваемые выравнивания - шестнадцать байтов или больше, восемь байтов, четыре байта, два байта и
однобайтовый. Это сделано для предотвращения пропусков между символами из-за ограничений выравнивания. Если нет
указывается порядок сортировки, затем предполагается порядок по убыванию.
--sort-section = имя
Эта опция применит "SORT_BY_NAME" ко всем шаблонам разделов с подстановочными знаками в компоновщике.
скрипты.
--sort-section = выравнивание
Этот параметр применит "SORT_BY_ALIGNMENT" ко всем шаблонам разделов с подстановочными знаками в
компоновщик скрипта.
--split-by-file [= пофайлам]размер]
Похожий на что --split-by-reloc но создает новый раздел вывода для каждого входного файла, когда
размер достигнуто размер по умолчанию размер 1, если не указан.
--split-by-reloc [=считать]
Пытается создать дополнительные разделы в выходном файле, чтобы ни один выходной раздел в
файл содержит более считать переезды. Это полезно при создании огромных
перемещаемые файлы для загрузки в определенные ядра реального времени с помощью объекта COFF
формат файла; поскольку COFF не может представлять более 65535 перемещений за один
раздел. Обратите внимание, что это не будет работать с форматами объектных файлов, которые не
поддерживать произвольные разделы. Компоновщик не разделяет отдельные входные разделы.
для распространения, поэтому, если один входной раздел содержит более считать переезд
один выходной раздел будет содержать столько перемещений. считать по умолчанию значение
32768.
--статистика
Вычислить и отобразить статистику работы компоновщика, например выполнение
время и использование памяти.
--sysroot =каталог
Используйте каталог в качестве местоположения sysroot, переопределяя значение по умолчанию во время настройки.
Эта опция поддерживается только компоновщиками, которые были настроены с помощью --with-sysroot.
- традиционный формат
Для некоторых целей вывод ld чем-то отличается от вывода некоторых
существующий компоновщик. Этот переключатель запрашивает ld вместо этого использовать традиционный формат.
Например, в SunOS ld объединяет повторяющиеся записи в таблице символьных строк. Этот
может уменьшить размер выходного файла с полной отладочной информацией более чем на 30
процентов. К сожалению, программа SunOS "dbx" не может прочитать получившуюся программу.
(у "gdb" нет проблем). В - традиционный формат переключатель говорит ld не совмещать
повторяющиеся записи.
--section-start =имя раздела=org
Найдите раздел в выходном файле по абсолютному адресу, заданному org. Вы можете использовать
этот параметр столько раз, сколько необходимо, чтобы найти несколько разделов в команде
линии. org должно быть одним шестнадцатеричным целым числом; для совместимости с другими линкерами,
вы можете опустить ведущий 0x обычно ассоциируется с шестнадцатеричными значениями. Примечание: там
не должно быть пробелов между имя раздела, знак равенства ("="), а также org.
-Tbss =org
-Tdata =org
-Ttext =org
Такой же как - начало раздела, с ".bss", ".data" или ".text" в качестве имя раздела.
-Ttext-сегмент =org
При создании исполняемого файла ELF он устанавливает адрес первого байта текста.
сегмент.
-Trodata-segment =org
При создании исполняемого файла ELF или общего объекта для цели, где данные только для чтения
находится в собственном сегменте, отдельном от исполняемого текста, он установит адрес
первый байт сегмента данных только для чтения.
-Tldata-segment =org
При создании исполняемого файла ELF или разделяемого объекта для модели памяти среднего уровня x86-64 он
установит адрес первого байта сегмента ldata.
--unresolved-symbols =метод
Определите, как обращаться с неразрешенными символами. Есть четыре возможных значения для
метод:
игнорировать все
Не сообщайте о неразрешенных символах.
отчет-все
Сообщите обо всех неразрешенных символах. Это значение по умолчанию.
игнорировать объектные файлы
Сообщать о неразрешенных символах, содержащихся в разделяемых библиотеках, но игнорировать их
если они поступают из обычных объектных файлов.
игнорировать в общих библиотеках
Сообщать о неразрешенных символах, которые поступают из обычных объектных файлов, но игнорировать их, если
они поступают из общих библиотек. Это может быть полезно при создании динамического
двоичный, и известно, что все разделяемые библиотеки, на которые он должен ссылаться
включены в командную строку компоновщика.
Поведение общих библиотек также можно контролировать с помощью
- [no-] allow-shlib-undefined опцию.
Обычно компоновщик генерирует сообщение об ошибке для каждого сообщенного неразрешенного символа.
но вариант --warn-неразрешенные-символы может изменить это на предупреждение.
--dll-подробный
--verbose [=НОМЕР]
Показать номер версии для ld и перечислите поддерживаемые эмуляции компоновщика. Отображать
какие входные файлы можно и нельзя открывать. Показать скрипт компоновщика, используемый
компоновщик. Если необязательный НОМЕР аргумент> 1, статус символа плагина также будет
отображается.
--version-script =версия-скрипт
Укажите компоновщику имя сценария версии. Обычно это используется, когда
создание разделяемых библиотек для указания дополнительной информации о версии
иерархия для создаваемой библиотеки. Эта опция полностью поддерживается только в ELF.
платформы, поддерживающие разделяемые библиотеки; видеть Версия. Частично поддерживается
Платформы PE, которые могут использовать скрипты версий для фильтрации видимости символов при автоэкспорте.
режим: любые обозначенные символы локальным в версии скрипт не будет экспортирован.
- предупреждение-обыкновенный
Предупреждать, когда общий символ сочетается с другим общим символом или с символом
определение. Компоновщики Unix допускают эту несколько небрежную практику, но компоновщики на некоторых
другие операционные системы этого не делают. Эта опция позволяет найти потенциальные проблемы
от объединения глобальных символов. К сожалению, некоторые библиотеки C используют эту практику, поэтому
вы можете получить некоторые предупреждения о символах в библиотеках, а также в ваших программах.
Есть три вида глобальных символов, проиллюстрированных здесь примерами C:
Int i = 1;
Определение, которое находится в разделе инициализированных данных выходного файла.
внешний Int i;
Неопределенная ссылка, которая не выделяет место. Должен быть либо
определение или общий символ для переменной где-нибудь.
Int i;
Обычный символ. Если для переменной есть только (один или несколько) общих символов,
он попадает в область неинициализированных данных выходного файла. Компоновщик объединяет
несколько общих символов для одной и той же переменной в один символ. Если они
разных размеров выбирает самый большой. Компоновщик превращает общий символ
в объявление, если есть определение той же переменной.
Команда - предупреждение-обыкновенный опция может выдавать пять видов предупреждений. Каждое предупреждение состоит из
пара строк: первая описывает только что встреченный символ, а вторая
описывает предыдущий встреченный символ с таким же именем. Один или оба из двух
символы будут общим символом.
1. Превращение общего символа в ссылку, потому что уже есть определение
для символа.
( ): warning: common of ` '
отменено по определению
( ): предупреждение: определено здесь
2. Превращение общего символа в ссылку, потому что более позднее определение для
встречается символ. Это то же самое, что и в предыдущем случае, за исключением того, что
символы встречаются в другом порядке.
( ): warning: определение ` '
преобладающий общий
( ): предупреждение: общий здесь
3. Объединение общего символа с предыдущим общим символом того же размера.
( ): предупреждение: несколько общих
из ` '
( ): предупреждение: предыдущее общее здесь
4. Объединение общего символа с предыдущим более крупным общим символом.
( ): warning: common of ` '
перекрывается более широким общим
( ): предупреждение: здесь больше распространенных
5. Объединение общего символа с предыдущим меньшим общим символом. Это тоже самое
как и в предыдущем случае, за исключением того, что символы встречаются в другом
порядка.
( ): warning: common of ` '
подавляя меньшее общее
( ): предупреждение: здесь меньше обычных
--warn-конструкторы
Предупреждать, если используются какие-либо глобальные конструкторы. Это полезно только для нескольких объектных файлов.
форматы. Для таких форматов, как COFF или ELF, компоновщик не может обнаружить использование глобального
конструкторы.
--warn-несколько-GP
Предупреждать, если в выходном файле требуется несколько значений глобального указателя. Это только
имеет смысл для некоторых процессоров, таких как Alpha. В частности, некоторые процессоры
поместите в специальный раздел многозначные константы. Специальный регистр (глобальный
указатель) указывает на середину этого раздела, чтобы можно было загружать константы
эффективно через режим относительной адресации базового регистра. Поскольку смещение в базе-
относительный режим регистров является фиксированным и относительно небольшим (например, 16 бит), это ограничивает
максимальный размер постоянного пула. Таким образом, в больших программах часто бывает необходимо
использовать несколько значений глобального указателя, чтобы иметь возможность адресовать все возможные
константы. Эта опция вызывает выдачу предупреждения всякий раз, когда возникает этот случай.
- предупреждать-раз
Предупреждать только один раз для каждого неопределенного символа, а не один раз для модуля, который относится к
его.
--warn-раздел-выравнивание
Предупредить, если адрес выходной секции изменился из-за выравнивания. Обычно
выравнивание будет установлено входной секцией. Адрес будет изменен только в том случае, если он
явно не указано; то есть, если в команде "РАЗДЕЛЫ" не указано начало
адрес раздела.
--warn-shared-textrel
Предупреждать, если компоновщик добавляет DT_TEXTREL к общему объекту.
--warn-альтернативный-em
Предупреждать, если объект имеет альтернативный машинный код ELF.
--warn-неразрешенные-символы
Если компоновщик сообщает о неразрешенном символе (см. Параметр
--неразрешенные-символы) обычно возникает ошибка. Эта опция делает это
вместо этого генерировать предупреждение.
-error-unresolved-symbols
Это восстанавливает поведение компоновщика по умолчанию, заключающееся в создании ошибок, когда он сообщает
неразрешенные символы.
- весь архив
Для каждого архива, указанного в командной строке после - весь архив вариант,
включать каждый объектный файл в архив в ссылку, а не искать
архив для требуемых объектных файлов. Обычно это используется для включения архивного файла
в общую библиотеку, заставляя каждый объект быть включенным в результирующий общий
библиотека. Эту опцию можно использовать более одного раза.
Два примечания при использовании этой опции из gcc: во-первых, gcc не знает об этой опции,
так что вы должны использовать -Wl, -whole-архив. Во-вторых, не забывайте использовать
-Wl, -no-весь-архив после вашего списка архивов, потому что gcc добавит свой собственный список
архивов на вашу ссылку, и вы можете не захотеть, чтобы этот флаг повлиял на них.
--wrap =символ
Используйте функцию-оболочку для символ. Любая неопределенная ссылка на символ будет решен
обернуть_условное обозначение". Любая неопределенная ссылка на "__real_"условное обозначение" будет решено
символ.
Это можно использовать для обеспечения оболочки для системной функции. Функция-оболочка
следует называть "__wrap_условное обозначение". Если он хочет вызвать системную функцию, он должен
позвонить "__real_условное обозначение".
Вот банальный пример:
пустота *
__wrap_malloc (размер_t c)
{
printf ("вызов malloc с помощью% zu \ n", c);
вернуть __real_malloc (c);
}
Если вы свяжете другой код с этим файлом, используя --сворачивать таНос, затем все вызовы "malloc"
вместо этого вызовет функцию «__wrap_malloc». Вызов «__real_malloc» в
«__wrap_malloc» вызовет настоящую функцию «malloc».
Вы можете также предоставить функцию «__real_malloc», чтобы ссылки без
--сворачивать вариант удастся. Если вы это сделаете, вы не должны помещать определение
«__real_malloc» в том же файле, что и «__wrap_malloc»; если вы это сделаете, ассемблер может
разрешите вызов до того, как у компоновщика появится возможность обернуть его в "malloc".
--eh-frame-hdr
Запросить создание раздела ".eh_frame_hdr" и заголовка сегмента ELF "PT_GNU_EH_FRAME".
--no-ld-сгенерированная-раскрутка-информация
Запросить создание размотки ".eh_frame" для разделов кода, сгенерированных компоновщиком, например
PLT. Этот параметр включен по умолчанию, если поддерживается информация о раскручивании, созданная компоновщиком.
--enable-новые-dtags
--disable-новые-dtags
Этот компоновщик может создавать новые динамические теги в ELF. Но старые системы ELF не могут
понять их. Если вы укажете --enable-новые-dtags, новые динамические теги будут
будут созданы по мере необходимости, а старые динамические теги будут опущены. Если вы укажете
--disable-новые-dtags, новые динамические теги создаваться не будут. По умолчанию новый динамический
теги не создаются. Обратите внимание, что эти параметры доступны только для систем ELF.
--hash-size =номер
Установите размер хэш-таблиц компоновщика по умолчанию на простое число, близкое к номер.
Увеличение этого значения может сократить время, необходимое компоновщику для выполнения
задач, за счет увеличения требований к памяти компоновщика. сходным образом
уменьшение этого значения может снизить требования к памяти за счет скорости.
--hash-style =стиль
Установите тип хеш-таблицы (-ов) компоновщика. стиль может быть либо "sysv" для классического ELF
Раздел ".hash", "gnu" для нового стиля GNU, ".gnu.hash" раздел или "оба" для обоих
хеш-таблицы классического ELF ".hash" и нового стиля GNU ".gnu.hash". По умолчанию это «sysv».
--compress-debug-section = нет
--compress-debug-section = zlib
--compress-debug-section = zlib-gnu
--compress-debug-section = zlib-gabi
На платформах ELF эти параметры управляют сжатием отладочных разделов DWARF с использованием
Злиб. --compress-debug-section = нет не сжимает отладочные разделы DWARF.
--compress-debug-section = zlib-gnu сжимает разделы отладки DWARF и переименовывает отладку
названия разделов для начала .zdebug вместо .отлаживать. --compress-debug-section = zlib
и --compress-debug-section = zlib-gabi сжатие отладочных разделов DWARF с
SHF_COMPRESSED из ELF ABI. Поведение по умолчанию зависит от
задействованная цель и параметры конфигурации, используемые для создания цепочки инструментов. По умолчанию
можно определить, изучив вывод компоновщика --Помогите опцию.
--reduce-memory-overheads
Эта опция снижает требования к памяти во время выполнения ld за счет связывания
скорость. Это было введено для выбора старого алгоритма O (n ^ 2) для файла карты ссылок.
поколения, а не новый алгоритм O (n), который использует примерно на 40% больше памяти для
хранение символов.
Другой эффект переключения - установка размера хэш-таблицы по умолчанию на 1021, что
снова экономит память за счет увеличения времени работы компоновщика. Это не сделано
однако если --хэш-размер переключатель был использован.
Команда --reduce-memory-overheads переключатель также может использоваться для включения других компромиссов в
будущие версии компоновщика.
--build-id
--build-id =стиль
Запросите создание раздела примечания ELF ".note.gnu.build-id" или COFF ".buildid"
раздел. Содержимое примечания - это уникальные биты, идентифицирующие этот связанный файл.
стиль может быть "uuid", чтобы использовать 128 случайных битов, "sha1", чтобы использовать 160-битный хэш SHA1 для
нормативные части выходного содержимого, "md5" для использования 128-битного хеша MD5 на
нормативные части выходного содержимого, или "0xшестнадцатеричная строка " использовать выбранную битовую строку
задано как четное число шестнадцатеричных цифр (символы "-" и ":" между
пары цифр игнорируются). Если стиль опускается, используется "sha1".
Стили «md5» и «sha1» создают идентификатор, который всегда одинаков в
идентичный выходной файл, но будет уникальным среди всех неидентичных выходных файлов. это
не предназначены для сравнения в качестве контрольной суммы содержимого файла. Связанный файл может
может быть изменен позже другими инструментами, но битовая строка идентификатора сборки, идентифицирующая исходный
связанный файл не меняется.
Передача "нет" для стиль отключает настройку из любых параметров "--build-id" ранее
командная строка.
Компоновщик i386 PE поддерживает -общий опция, которая заставляет вывод быть
динамически подключаемая библиотека (DLL) вместо обычного исполняемого файла. Вы должны назвать
при использовании этой опции выведите "* .dll". Кроме того, компоновщик полностью поддерживает
стандартные файлы "* .def", которые могут быть указаны в командной строке компоновщика как объект
файл (фактически, он должен предшествовать архивам, из которых экспортируются символы, чтобы гарантировать, что они получат
связаны, как обычный объектный файл).
В дополнение к опциям, общим для всех целей, компоновщик i386 PE поддерживает дополнительные
параметры командной строки, относящиеся к цели i386 PE. Параметры, принимающие значения
могут быть отделены от своих значений пробелом или знаком равенства.
--add-stdcall-псевдоним
Если указано, символы с суффиксом stdcall (@nn) будет экспортирован как есть, а также с
суффикс удален. [Этот параметр относится к целевому порту компоновщика i386 PE]
--base-файл файл
Используйте файл как имя файла, в котором будут храниться базовые адреса всех
перемещения, необходимые для создания DLL с dlltool. [Это специфичный для i386 PE
вариант]
--dll
Создайте DLL вместо обычного исполняемого файла. Вы также можете использовать -общий или укажите
"БИБЛИОТЕКА" в данном файле ".def". [Этот параметр специфичен для i386 PE, предназначенного для
порт компоновщика]
--enable-длинные-имена-разделов
--disable-длинные-имена-разделов
Варианты PE объектного формата COFF добавляют расширение, позволяющее использовать
имена разделов длиннее восьми символов, нормальный предел для COFF. По умолчанию,
эти имена разрешены только в объектных файлах, так как полностью связанные исполняемые изображения не
содержат таблицу строк COFF, необходимую для поддержки более длинных имен. Как расширение GNU,
можно также разрешить их использование в исполняемых образах или (возможно,
бессмысленно!) запретить это в объектных файлах, используя эти две опции. Исполняемый
изображения, созданные с этими длинными названиями разделов, немного нестандартны и имеют как
они создают таблицу строк и могут генерировать запутанный вывод при просмотре с использованием не-GNU
Инструменты, поддерживающие PE, такие как средства просмотра файлов и дамперы. Однако GDB полагается на использование
Длинные имена разделов PE для поиска разделов отладочной информации Dwarf-2 в исполняемом файле
изображение во время выполнения, и поэтому, если ни один параметр не указан в командной строке, ld предусматривает
включить длинные имена разделов, переопределив поведение по умолчанию и технически правильное поведение,
когда он обнаруживает наличие отладочной информации при связывании исполняемого образа и
не удаляя символы. [Эта опция действительна для всех целевых портов PE компоновщика]
--enable-stdcall-fixup
--disable-stdcall-fixup
Если ссылка обнаруживает символ, который не может разрешить, она попытается выполнить "нечеткое
связывание "путем поиска другого определенного символа, который отличается только форматом
имя символа (cdecl vs stdcall) и разрешит этот символ путем ссылки на совпадение.
Например, неопределенный символ «_foo» может быть связан с функцией «_foo @ 12» или
неопределенный символ «_bar @ 16» может быть связан с функцией «_bar». Когда
компоновщик делает это, он выводит предупреждение, так как обычно он не должен связываться,
но иногда эта функция может понадобиться для импорта библиотек, созданных из сторонних dll.
быть пригодным для использования. Если вы укажете --enable-stdcall-fixup, эта функция полностью включена
и предупреждения не печатаются. Если вы укажете --disable-stdcall-fixup, эта функция
отключены, и такие несоответствия считаются ошибками. [Эта опция специфична для
целевой порт компоновщика i386 PE]
- начало-подчеркивание
--no-lead-underscore
Для большинства целей префиксом символа по умолчанию является символ подчеркивания, который определяется в параметре target.
описание. С помощью этой опции можно отключить / включить подчеркивание по умолчанию
символ-префикс.
--экспорт-все-символы
Если задано, все глобальные символы в объектах, используемых для построения DLL, будут экспортированы
DLL. Обратите внимание, что это значение по умолчанию, если в противном случае не было бы экспортированных
символы. Когда символы явно экспортируются через файлы DEF или неявно экспортируются
через атрибуты функции, по умолчанию ничего не экспортируется, если только этот параметр
дано. Обратите внимание, что символы «DllMain @ 12», «DllEntryPoint @ 0»,
«DllMainCRTStartup @ 12» и «impure_ptr» не экспортируются автоматически. Также,
символы, импортированные из других DLL, не будут повторно экспортированы, как и символы, указывающие
внутренний макет DLL, например, начинающийся с "_head_" или заканчивающийся
"_iname". Кроме того, никаких символов из "libgcc", "libstd ++", "libmingw32" или
"crtX.o" будет экспортирован. Символы, имена которых начинаются с «__rtti_» или «__builtin_»
не будет экспортирован, чтобы помочь с библиотеками C ++. Наконец, есть обширный список
cygwin-частные символы, которые не экспортируются (очевидно, это применяется при построении
DLL для целей cygwin). Эти исключения cygwin: "_cygwin_dll_entry @ 12",
"_cygwin_crt0_common @ 8", "_cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr",
"cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2",
«cygwin_premain3» и «окружающая среда». [Этот параметр специфичен для i386 PE, предназначенного для
порт компоновщика]
--exclude-символы символ,символ, ...
Задает список символов, которые не следует экспортировать автоматически. Символ
имена могут быть разделены запятыми или двоеточиями. [Эта опция специфична для i386 PE
целевой порт компоновщика]
- исключить-все-символы
Указывает, что символы не должны автоматически экспортироваться. [Эта опция специфична для
целевой порт компоновщика i386 PE]
- выравнивание файлов
Укажите выравнивание файла. Разделы в файле всегда будут начинаться со смещений файла
которые кратны этому числу. По умолчанию это 512. [Этот параметр специфичен
на целевой порт компоновщика i386 PE]
- куча резерв
- куча резерв,совершать
Укажите количество байтов памяти, которые необходимо зарезервировать (и, при необходимости, зафиксировать), которые будут использоваться в качестве
куча для этой проги. По умолчанию зарезервировано 1 МБ, зафиксировано 4 КБ. [Этот вариант
специфичен для целевого порта компоновщика i386 PE]
--изображение-база ценностное
Используйте ценностное в качестве базового адреса вашей программы или dll. Это самая низкая память
место, которое будет использоваться при загрузке вашей программы или библиотеки DLL. Чтобы уменьшить потребность в
перемещать и улучшать производительность ваших dll, каждая из которых должна иметь уникальный базовый адрес
и не перекрывать другие DLL. По умолчанию для исполняемых файлов установлено значение 0x400000, и
0x10000000 для dll. [Этот параметр относится к целевому порту i386 PE
компоновщик]
- убить на
Если задан, суффиксы stdcall (@nn) будут удалены из символов, прежде чем они будут
экспортируется. [Этот параметр относится к целевому порту компоновщика i386 PE]
- большие адреса
Если задан, устанавливается соответствующий бит в поле «Характеристики» заголовка COFF.
чтобы указать, что этот исполняемый файл поддерживает виртуальные адреса размером более 2 гигабайт.
Его следует использовать вместе с / 3GB или / USERVA =ценностное мегабайты включить
раздел «[операционные системы]» файла BOOT.INI. В противном случае этот бит не действует.
[Этот параметр специфичен для портов, нацеленных на PE компоновщика]
--disable-большой-адрес-осведомленный
Отменяет эффект предыдущего - большие адреса вариант. Это полезно, если
- большие адреса всегда устанавливается драйвером компилятора (например, Cygwin gcc), а
исполняемый файл не поддерживает виртуальные адреса более 2 гигабайт. [Этот вариант
специфичен для портов, нацеленных на PE компоновщика]
--основная-изображение-версия ценностное
Устанавливает старший номер «версии образа». По умолчанию 1. [Этот параметр
специфичен для целевого порта компоновщика i386 PE]
--основная-ОС-версия ценностное
Устанавливает старший номер «версии ОС». По умолчанию 4. [Этот параметр специфичен
на целевой порт компоновщика i386 PE]
--основная-подсистема-версия ценностное
Устанавливает старший номер «версии подсистемы». По умолчанию 4. [Этот параметр
специфичен для целевого порта компоновщика i386 PE]
--второстепенная версия изображения ценностное
Устанавливает младший номер «версии изображения». По умолчанию 0. [Этот параметр
специфичен для целевого порта компоновщика i386 PE]
--minor-os-версия ценностное
Устанавливает младший номер «версии ОС». По умолчанию 0. [Этот параметр специфичен
на целевой порт компоновщика i386 PE]
- минор-подсистема-версия ценностное
Устанавливает младший номер «версии подсистемы». По умолчанию 0. [Этот параметр
специфичен для целевого порта компоновщика i386 PE]
--output-def файл
Компоновщик создаст файл файл который будет содержать файл DEF, соответствующий
DLL, которую создает компоновщик. Этот файл DEF (который следует называть "* .def") может
может использоваться для создания библиотеки импорта с помощью «dlltool» или может использоваться как ссылка на
автоматически или неявно экспортируемые символы. [Эта опция специфична для i386 PE
целевой порт компоновщика]
--out-implib файл
Компоновщик создаст файл файл который будет содержать импортную библиотеку, соответствующую
DLL, которую создает компоновщик. Эта импортная библиотека (которая должна называться "* .dll.a" или
«* .a» может использоваться для связывания клиентов с созданной DLL; такое поведение делает это
можно пропустить отдельный шаг создания библиотеки импорта "dlltool". [Этот вариант
специфичен для целевого порта компоновщика i386 PE]
--enable-auto-image-base
--enable-auto-image-base =ценностное
Автоматически выбирать основу образа для библиотек DLL, при необходимости начиная с базы ценностное ,
если он не указан с помощью аргумента "--image-base". Используя сгенерированный хеш
из имени dll для создания уникальных баз изображений для каждой DLL, конфликтов в памяти и
перемещений, которые могут задержать выполнение программы, избегают. [Этот вариант специфичен
на целевой порт компоновщика i386 PE]
--disable-auto-image-base
Не создавайте автоматически уникальную основу изображения. Если не указан пользователь
image base ("--image-base"), затем используйте платформу по умолчанию. [Этот вариант специфичен
на целевой порт компоновщика i386 PE]
--dll-поиск-префикс string
При динамической компоновке с dll без библиотеки импорта ищите
" .dll "вместо" lib .dll ". Такое поведение позволяет
простое различие между библиотеками DLL, созданными для различных "подплатформ": собственные, cygwin,
uwin, pw и т. д. Например, библиотеки DLL cygwin обычно используют "--dll-search-prefix = cyg".
[Этот параметр относится к целевому порту компоновщика i386 PE]
--включить автоматический импорт
Выполните сложную привязку «_symbol» к «__imp__symbol» для импорта ДАННЫХ из DLL,
и создайте необходимые символы перехода при создании библиотек импорта с помощью
эти ДАННЫЕ экспортируются. Примечание. Использование расширения "автоматический импорт" приведет к тому, что текст
раздел файла изображения, который нужно сделать доступным для записи. Это не соответствует требованиям PE-COFF.
спецификация формата, опубликованная Microsoft.
Примечание. Использование расширения «автоимпорт» также вызовет данные только для чтения, что приведет к
обычно помещается в секцию .rdata, которая будет помещена в секцию .data
вместо. Это сделано для того, чтобы обойти описанную проблему с константами
здесь: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
Использование "автоимпорта" обычно "просто работает", но иногда вы можете увидеть это
сообщение:
"переменная" не может быть импортирована автоматически. Прочтите документацию по ld
"--enable-auto-import" для подробностей. "
Это сообщение появляется, когда какое-то (под) выражение обращается к адресу, в конечном итоге предоставленному
сумма двух констант (таблицы импорта Win32 допускают только одну). Экземпляры, где это
может происходить, включая доступ к полям-членам структурных переменных, импортированных из DLL,
а также использование постоянного индекса в переменной массива, импортированной из DLL. Любой
многословная переменная (массивы, структуры, long long и т. д.) может вызвать это состояние ошибки.
Однако, независимо от точного типа данных экспортируемой переменной, вызывающей нарушение, ld будет
всегда обнаруживать это, выдавать предупреждение и выходить.
Есть несколько способов решить эту проблему, независимо от типа данных
экспортируемая переменная:
Один из способов - использовать переключатель --enable-runtime-pseudo-reloc. Это оставляет задачу
корректировка ссылок в вашем клиентском коде для среды выполнения, поэтому этот метод работает
только если среда выполнения поддерживает эту функцию.
Второе решение - заставить одну из «констант» быть переменной, то есть
неизвестно и не оптимизируется во время компиляции. Для массивов есть две возможности:
а) сделать индексатора (адрес массива) переменной, или б) сделать "постоянным" индекс
Переменная. Таким образом:
внешний тип extern_array [];
extern_array [1] ->
{изменчивый тип * t = extern_array; т [1]}
or
внешний тип extern_array [];
extern_array [1] ->
{изменчивый int t = 1; extern_array [t]}
Для структур (и большинства других многословных типов данных) единственный вариант - сделать
struct сама (или long long, или ...) переменная:
внешняя структура extern_struct;
extern_struct.field ->
{изменчивая структура s * t = & extern_struct; t-> поле}
or
внешний длинный длинный extern_ll;
extern_ll ->
{volatile long long * local_ll = & extern_ll; * local_ll}
Третий способ справиться с этой трудностью - отказаться от автоматического импорта для
оскорбительный символ и пометьте его «__declspec (dllimport)». Однако на практике это
требует использования #defines во время компиляции, чтобы указать, создаете ли вы DLL,
создание клиентского кода, который будет ссылаться на DLL, или просто создание / привязка к статическому
библиотека. Делая выбор между различными методами разрешения `` прямой
адрес с постоянным смещением ', вам следует рассмотреть типичное использование в реальном мире:
Оригинал:
--foo.h
внешний int arr [];
--foo.c
#include "foo.h"
void main (int argc, char ** argv) {
printf ("% d \ n", arr [1]);
}
Решение 1:
--foo.h
внешний int arr [];
--foo.c
#include "foo.h"
void main (int argc, char ** argv) {
/ * Это обходной путь для win32 и cygwin; не "оптимизировать" * /
изменчивый int * parr = arr;
printf ("% d \ n", parr [1]);
}
Решение 2:
--foo.h
/ * Примечание: предполагается автоматический экспорт (без __declspec (dllexport)) * /
#if (определено (_WIN32) || определено (__ CYGWIN__)) && \
! (определено (FOO_BUILD_DLL) || определено (FOO_STATIC))
#define FOO_IMPORT __declspec (dllimport)
#еще
#define FOO_IMPORT
#endif
внешний FOO_IMPORT int arr [];
--foo.c
#include "foo.h"
void main (int argc, char ** argv) {
printf ("% d \ n", arr [1]);
}
Четвертый способ избежать этой проблемы - перекодировать вашу библиотеку для использования функционального
интерфейс, а не интерфейс данных для проблемных переменных (например, set_foo () и
get_foo () вспомогательные функции). [Этот параметр относится к целевому порту i386 PE
линкера]
--отключить автоматический импорт
Не пытайтесь создать сложную привязку «_symbol» к «__imp__symbol» для ДАННЫХ.
импорт из DLL. [Этот параметр относится к целевому порту i386 PE
компоновщик]
--enable-runtime-псевдо-релок
Если ваш код содержит выражения, описанные в разделе --enable-auto-import, то есть
DATA импортирует из DLL с ненулевым смещением, этот переключатель создаст вектор
«псевдоперемещения времени выполнения», которые могут использоваться средой выполнения для настройки
ссылки на такие данные в вашем клиентском коде. [Эта опция специфична для i386 PE
целевой порт компоновщика]
--disable-runtime-псевдо-релок
Не создавайте псевдоперемещения для импорта ДАННЫХ с ненулевым смещением из DLL. [Этот
опция специфична для целевого порта i386 PE компоновщика]
--enable-extra-pe-debug
Показать дополнительную отладочную информацию, связанную с преобразованием символов автоматического импорта. [Этот вариант
специфичен для целевого порта компоновщика i386 PE]
--section-выравнивание
Устанавливает выравнивание раздела. Разделы в памяти всегда будут начинаться с адресов, которые
кратны этому числу. По умолчанию 0x1000. [Эта опция специфична для
i386 PE целевой порт компоновщика]
--куча резерв
--куча резерв,совершать
Укажите количество байтов памяти, которые необходимо зарезервировать (и, при необходимости, зафиксировать), которые будут использоваться в качестве
стек для этой программы. По умолчанию зарезервировано 2 МБ, зафиксировано 4 КБ. [Этот вариант
специфичен для целевого порта компоновщика i386 PE]
--подсистема , которые
--подсистема , которые:основной
--подсистема , которые:основной.небольшая
Задает подсистему, в которой будет выполняться ваша программа. Правовые значения для
, которые являются "родными", "windows", "console", "posix" и "xbox". При желании вы можете установить
версия подсистемы также. Числовые значения также принимаются для , которые. [Этот вариант
специфичен для целевого порта i386 PE компоновщика]
Следующие параметры устанавливают флаги в поле "DllCharacteristics" PE-файла.
заголовок: [Эти параметры относятся к целевым портам PE компоновщика]
- высокая энтропия-ва
Изображение совместимо с 64-битной рандомизацией разметки адресного пространства (ASLR).
--динамическая база
Базовый адрес изображения можно переместить, используя рандомизацию компоновки адресного пространства.
(ASLR). Эта функция была представлена в MS Windows Vista для целей i386 PE.
--forceinteg
Проверки целостности кода обязательны.
--nxcompat
Изображение совместимо с функцией предотвращения выполнения данных. Эта функция была
введен в MS Windows XP SP2 для целей i386 PE.
- без изоляции
Хотя изображение понимает изоляцию, не изолируйте изображение.
- нет
Изображение не использует SEH. Из этого образа нельзя вызывать обработчик SE.
--без привязки
Не привязывайте это изображение.
--wdmdriver
Драйвер использует модель драйвера MS Windows.
- сознавать
Изображение поддерживает сервер терминалов.
--insert-timestamp
--no-insert-timestamp
Вставьте метку реального времени в изображение. Это поведение по умолчанию, так как оно соответствует
устаревший код, и это означает, что изображение будет работать с другими проприетарными инструментами. В
проблема с этим значением по умолчанию в том, что это приведет к тому, что изображения будут немного отличаться.
производится каждый раз, когда ссылки на одни и те же источники. Опция --no-insert-timestamp
использоваться для вставки нулевого значения для метки времени, что гарантирует создание двоичных файлов
из одинаковых источников будут сравнивать одинаково.
Целевой объект C6X uClinux использует двоичный формат, называемый DSBT, для поддержки разделяемых библиотек. Каждый
разделяемая библиотека в системе должна иметь уникальный индекс; все исполняемые файлы используют индекс
0.
--dsbt-размер размер
Эта опция устанавливает количество записей в DSBT текущего исполняемого или совместно используемого файла.
библиотека в размер. По умолчанию создается таблица с 64 записями.
--dsbt-индекс индекс
Эта опция устанавливает для индекса DSBT текущей исполняемой или разделяемой библиотеки значение индекс.
Значение по умолчанию - 0, что подходит для создания исполняемых файлов. Если общий
библиотека генерируется с индексом DSBT, равным 0, перестановки "R_C6000_DSBT_INDEX"
скопировано в выходной файл.
Команда --no-merge-exidx-записи переключатель отключает объединение соседних записей exidx в
информация о размотке кадра.
Линкеры 68HC11 и 68HC12 поддерживают определенные опции для управления банком памяти.
отображение коммутации и генерация кода трамплина.
--батута
Эта опция отключает создание батута. По умолчанию батут
генерируется для каждой удаленной функции, которая вызывается с помощью инструкции "jsr" (это
происходит, когда берется указатель на дальнюю функцию).
--банк-окно имя
Эта опция указывает компоновщику имя области памяти в ПАМЯТЬ
спецификация, описывающая окно банка памяти. Определение такой области:
затем используется компоновщиком для вычисления подкачки страниц и адресов в окне памяти.
Следующие параметры поддерживаются для управления обработкой генерации GOT при связывании для
68К целей.
--got =напишите
Эта опция сообщает компоновщику, какую схему генерации GOT использовать. напишите должен быть один
of одинарной, отрицательный, многоточечный or цель. Для получения дополнительной информации обратитесь к разделу «Информация».
для ld.
Следующие параметры поддерживаются для управления генерацией инструкций microMIPS, когда
связывание для целей MIPS.
--insn32
--no-insn32
Эти параметры управляют выбором инструкций microMIPS, используемых в коде, сгенерированном
линкер, такой как линкер в PLT или в заглушках ленивого связывания, или в релаксации. Если
--insn32 , то компоновщик использует только 32-битные кодировки инструкций. По умолчанию
или если --no-insn32 используются все кодировки инструкций, в том числе 16-битные
где возможно.
ОКРУЖАЮЩАЯ СРЕДА
Вы можете изменить поведение ld с переменными окружения "GNUTARGET",
"LDEMULATION" и "COLLECT_NO_DEMANGLE".
"GNUTARGET" определяет формат объекта входного файла, если вы не используете -b (или его синоним
--формат). Его значение должно быть одним из имен BFD для входного формата. Если нет
«ГНУТАРГЕТ» в среде, ld использует естественный формат цели. Если "GNUTARGET"
установлен на "по умолчанию", тогда BFD пытается обнаружить входной формат, исследуя двоичный
входные файлы; этот метод часто оказывается успешным, но есть потенциальные двусмысленности, так как
нет способа гарантировать, что магическое число, используемое для указания форматов объектных файлов,
уникальный. Однако процедура настройки BFD в каждой системе помещает
обычный формат для этой системы первым в списке поиска, поэтому двусмысленности устранены
в пользу условности.
"LDEMULATION" определяет эмуляцию по умолчанию, если вы не используете -m вариант.
эмуляция может влиять на различные аспекты поведения компоновщика, особенно на компоновщик по умолчанию.
сценарий. Вы можете перечислить доступные эмуляции с помощью --подробный or -V параметры. Если
-m опция не используется, и переменная среды "LDEMULATION" не определена,
эмуляция по умолчанию зависит от того, как был настроен компоновщик.
Обычно компоновщик по умолчанию использует символы разборки. Однако если
"COLLECT_NO_DEMANGLE" установлен в среде, тогда он по умолчанию не будет демонтировать
символы. Эта переменная среды аналогичным образом используется компоновщиком "gcc".
программа-оболочка. Значение по умолчанию может быть отменено - распутать и --no-разбирать
настройки.
Используйте aarch64-linux-gnu-ld.bfd в Интернете с помощью сервисов onworks.net