Это команда i686-linux-gnu-ld.bfd, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
ld - компоновщик GNU
СИНТАКСИС
лд [кредита] objfile ...
ОПИСАНИЕ
ld объединяет ряд объектных и архивных файлов, перемещает их данные
и связывает ссылки на символы. Обычно последний шаг в составлении
программа должна работать ld.
ld принимает файлы командного языка компоновщика, написанные в надмножестве
Синтаксис командного языка редактора ссылок AT&T для обеспечения явного и
полный контроль над процессом связывания.
Эта страница руководства не описывает командный язык; увидеть ld запись
в "info" для получения полной информации о командном языке и других аспектах.
компоновщика GNU.
Эта версия ld использует библиотеки BFD общего назначения для работы с
объектные файлы. Это позволяет ld для чтения, объединения и записи объектных файлов
во многих различных форматах - например, COFF или "a.out". Разные
форматы могут быть связаны вместе для создания любого доступного вида объекта
.
Помимо гибкости, компоновщик GNU более полезен, чем другие
линкеры в предоставлении диагностической информации. Многие линкеры отказываются
выполнение сразу при обнаружении ошибки; когда возможно, ld
продолжает выполнение, что позволяет вам идентифицировать другие ошибки (или, в некоторых
случаях, чтобы получить выходной файл, несмотря на ошибку).
Компоновщик GNU ld предназначен для охвата широкого круга ситуаций и
быть максимально совместимым с другими линкерами. В результате у вас есть
множество вариантов управления его поведением.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Компоновщик поддерживает множество параметров командной строки, но на самом деле
на практике немногие из них используются в каком-либо конкретном контексте. Например,
частое использование ld заключается в связывании стандартных объектных файлов Unix на
стандартная, поддерживаемая система Unix. В такой системе, чтобы связать файл
"привет.о":
Я делаю /lib/crt0.o hello.o -lc
Это говорит ld для создания файла с именем выходной в результате связывания
файл "/lib/crt0.o" с "hello.o" и библиотека "libc.a", которая
будет происходить из стандартных справочников поиска. (См. Обсуждение
-l вариант ниже.)
Некоторые параметры командной строки для ld может быть указано в любой момент в
командная строка. Однако параметры, относящиеся к файлам, например -l or
-T, заставьте файл быть прочитанным в точке, в которой появляется опция
в командной строке относительно объектных файлов и другого файла
опции. Повторение нефайловых опций с другим аргументом приведет к
либо не имеют дальнейшего эффекта, либо отменяют предыдущие вхождения (те
левее в командной строке) этого параметра. Варианты, которые
могут быть значимо указаны более одного раза, указаны в
описания ниже.
Неопциональные аргументы - это объектные файлы или архивы, которые должны быть
связаны вместе. Они могут следовать, предшествовать или смешиваться с
параметры командной строки, за исключением того, что аргумент объектного файла не может быть
помещается между опцией и ее аргументом.
Обычно компоновщик вызывается хотя бы с одним объектным файлом, но вы
может указывать другие формы двоичных входных файлов, используя -l, -R, и
командный язык сценария. Если нет двоичные входные файлы вообще
указано, компоновщик не производит никакого вывода и выдает
сообщение Нет вход файлов.
Если компоновщик не может распознать формат объектного файла, он
Предположим, что это скрипт компоновщика. Сценарий, указанный таким образом
дополняет основной скрипт компоновщика, используемый для ссылки (либо по умолчанию
скрипт компоновщика или тот, который указан с помощью -T). Эта функция позволяет
компоновщик для связи с файлом, который выглядит как объект или
архив, но на самом деле просто определяет некоторые значения символов или использует
«ВХОД» или «ГРУППА» для загрузки других объектов. Указание скрипта в этом
way просто дополняет основной скрипт компоновщика дополнительными командами
размещается после основного скрипта; использовать -T возможность заменить дефолтный
Сценарий компоновщика полностью, но обратите внимание на эффект команды «ВСТАВИТЬ».
Для параметров, имена которых состоят из одной буквы, аргументы параметра должны
либо следовать за буквой варианта без пробелов, либо быть
даны как отдельные аргументы сразу после опции, которая
требует их.
Для параметров, названия которых состоят из нескольких букв, одно или два тире.
может предшествовать имени опции; Например, -символ и
--символа следа эквивалентны. Примечание: есть одно исключение.
правило. Варианты с несколькими буквами, которые начинаются со строчной буквы «о», могут
только перед двумя дефисами. Это сделано для того, чтобы избежать путаницы с
-o вариант. Так например -омагия устанавливает имя выходного файла на магия
в то время как --омагия устанавливает флаг NMAGIC на выходе.
Аргументы к многобуквенным параметрам должны быть отделены от
имя опции знаком равенства или быть передано в виде отдельных аргументов
сразу после того, как они потребуются. Например,
--символа следа Foo и --trace-symbol = foo эквивалентны. Уникальный
Допускаются сокращения названий многобуквенных вариантов.
Примечание --- если компоновщик вызывается косвенно, через драйвер компилятора
(например GCC), тогда все параметры командной строки компоновщика должны иметь префикс
by -Вл, (или все, что подходит для конкретного драйвера компилятора)
как это:
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 настроен таким образом, вы можете использовать -b вариант
укажите двоичный формат для входных объектных файлов, следующих за этим
параметр в командной строке. Даже когда ld настроен для поддержки
альтернативные форматы объектов, обычно это указывать не нужно,
as ld должен быть настроен так, чтобы в качестве формата ввода по умолчанию
самый обычный формат на каждой машине. входной формат текстовая строка,
имя определенного формата, поддерживаемого библиотеками BFD.
(Вы можете перечислить доступные двоичные форматы с помощью объектный дамп -i.)
Вы можете использовать эту опцию, если вы связываете файлы с
необычный двоичный формат. Вы также можете использовать -b переключать форматы
явно (при связывании объектных файлов разных форматов),
включая -b входной формат перед каждой группой объектных файлов в
конкретный формат.
Формат по умолчанию берется из переменной окружения
"ГНУТАРГЕТ".
Вы также можете определить формат ввода из скрипта, используя
команда «ЦЕЛЬ»;
-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.
В будущих версиях компоновщика эта опция может быть больше использована.
Также в настоящее время нет разницы в поведении компоновщика для
различные ненулевые значения этой опции. Опять же, это может измениться
с будущими выпусками.
- пуш-состояние
The - пуш-состояние позволяет сохранить текущее состояние флагов
которые управляют обработкой входного файла, чтобы все они могли быть
восстановлен одним соответствующим --поп-состояние опцию.
Охватываемые варианты: -Bдинамический, -Бстатический, -дн, -ди,
-call_shared, -non_shared, -статический, -N, -n, - весь архив,
--no-весь-архив, -r, -Ур, --copy-dt-необходимые-записи,
--no-copy-dt-необходимые-записи, --по мере необходимости, - не по мере необходимости и -a.
Одной из целей для этого варианта являются спецификации для pkg-конфигурация. Когда
используется с --libs вариант все необходимые библиотеки
внесены в список, а затем, возможно, связаны все время. Лучше
верните что-нибудь следующим образом:
-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's
скрипт компоновщика по умолчанию (а не добавление к нему), поэтому командный файл
необходимо указать все необходимое для описания выходного файла.
If файл сценария не существует в текущем каталоге, "ld" выглядит
для него в каталогах, указанных любыми предыдущими -L настройки.
Многочисленные -T варианты накапливаются.
-dT файл сценария
--default-script =файл сценария
Используйте файл сценария как сценарий компоновщика по умолчанию.
Этот вариант аналогичен --скрипт вариант кроме этого
обработка скрипта откладывается до тех пор, пока не закончится оставшаяся часть
командная строка обработана. Это позволяет размещать параметры после
- скрипт по умолчанию параметр в командной строке, чтобы повлиять на
поведение сценария компоновщика, что может быть важно, когда
Командная строка компоновщика не может напрямую контролироваться пользователем. (например
потому что командная строка создается другим инструментом, например
as GCC).
-u символ
--undefined =символ
Форс-мажор символ быть введенным в выходной файл как неопределенный
символ. Это может, например, вызвать привязку дополнительных
модули из стандартных библиотек. -u может повторяться с разными
аргументы опции для ввода дополнительных неопределенных символов. Этот
Эта опция эквивалентна команде сценария компоновщика "EXTERN".
Если эта опция используется для принудительного включения дополнительных модулей
втянут в ссылку, и если это ошибка для символа
остаются неопределенными, тогда опция --require-определенный должен быть использован
.
--require-defined =символ
Требовать, чтобы символ определяется в выходном файле. Этот вариант
как вариант --неопределенный за исключением того, что если символ не определен
в выходном файле компоновщик выдаст ошибку и завершит работу.
Тот же эффект может быть достигнут в сценарии компоновщика, используя
«EXTERN», «ASSERT» и «DEFINED» вместе. Этот вариант можно использовать
несколько раз, чтобы потребовать дополнительные символы.
-Ур Для всех, кроме программ на C ++, этот параметр эквивалентен
-r: он генерирует перемещаемый вывод, т. е. выходной файл, который может
в свою очередь служить вкладом в ld. При компоновке программ на C ++ -Ур приносит
разрешить ссылки на конструкторы, в отличие от -r. Не получается
используют -Ур на файлы, которые сами были связаны с -Ур; однажды
таблица конструктора построена, ее нельзя добавить. Использовать -Ур
только для последней частичной ссылки и -r для остальных.
--orphan-handle =РЕЖИМ
Контролируйте, как обрабатываются бесхозные разделы. Сиротское отделение - одно
не упоминается конкретно в сценарии компоновщика.
РЕЖИМ может иметь любое из следующих значений:
"место"
Сиротские разделы помещаются в подходящий выходной раздел
следуя стратегии, описанной в Сирота Разделы,
вариант --уникальный также влияет на расположение секций.
"отказаться"
Все лишние разделы удаляются, помещая их в
/ОТКАЗАТЬСЯ/ .
"предупреждать"
Компоновщик разместит потерянный раздел как для "места", так и для
также выдают предупреждение.
"ошибка"
Компоновщик завершит работу с ошибкой, если какой-либо потерянный раздел
найдено.
По умолчанию, если - обращение с сиротами не дано это «место».
--уникальный [=РАЗДЕЛ]
Создает отдельный раздел вывода для каждого совпадения раздела ввода
РАЗДЕЛ, или если необязательный подстановочный знак РАЗДЕЛ аргумент отсутствует,
для каждой секции ввода сирот. Сиротское отделение - это не
специально упоминается в сценарии компоновщика. Вы можете использовать эту опцию
несколько раз в командной строке; Это препятствует нормальному слиянию
разделов ввода с тем же именем, переопределяя раздел вывода
назначения в сценарии компоновщика.
-v
--версия
-V Показать номер версии для ld, -V вариант также перечисляет
поддерживаемые эмуляции.
-x
--discard-все
Удалите все локальные символы.
-X
--discard-locals
Удалите все временные локальные символы. (Эти символы начинаются с
системные префиксы локальных меток, обычно .L для систем ELF
or 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.
-( архивам -)
--старт-группа архивам --конечная группа
The архивам должен быть список архивных файлов. Они могут быть либо
явные имена файлов, или -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 не будут
пройти, чтобы разрешить символы.
--креф
Выведите таблицу перекрестных ссылок. Если файл карты компоновщика
таблица перекрестных ссылок распечатывается в файл карты.
В противном случае он печатается на стандартном выводе.
Формат таблицы намеренно простой, поэтому он может быть
легко обрабатывается скриптом при необходимости. Символы напечатаны
отсортировано по имени. Для каждого символа есть список имен файлов.
данный. Если символ определен, первым из перечисленных файлов будет
расположение определения. Если символ определяется как обычный
value, тогда все файлы, в которых это происходит, появятся следующими. Наконец-то любой
перечислены файлы, которые ссылаются на этот символ.
--no-define-общий
Эта опция запрещает присвоение адресов общим символам.
Команда сценария «INHIBIT_COMMON_ALLOCATION» имеет такой же эффект.
The --no-define-общий опция позволяет отделить решение от
назначить адреса Общим символам из выбора выхода
тип файла; в противном случае тип вывода, который нельзя перемещать, заставляет назначить
обращается к Общим символам. С использованием --no-define-общий позволяет
Общие символы, на которые есть ссылки из общей библиотеки,
адреса назначаются только в основной программе. Это устраняет
неиспользуемое дублированное пространство в общей библиотеке, а также предотвращает любые
возможная путаница при разрешении не того дубликата, когда есть
много динамических модулей со специализированными путями поиска для времени выполнения
разрешение символа.
--defsym =символ=выражение
Создайте глобальный символ в выходном файле, содержащий абсолютный
адрес предоставлен выражение. Вы можете использовать эту опцию сколько угодно раз
при необходимости определить несколько символов в командной строке. А
ограниченная форма арифметики поддерживается для выражение В этом
контекст: вы можете указать шестнадцатеричную константу или имя
существующий символ или используйте "+" и "-" для добавления или вычитания шестнадцатеричного числа
константы или символы. Если вам нужны более сложные выражения,
рассмотрите возможность использования командного языка компоновщика из сценария. Примечание:
между ними не должно быть пробелов символ, знак равенства
("="), а также выражение.
--demangle [=стиль]
--no-разбирать
Эти параметры определяют, следует ли по ошибке распутывать имена символов.
сообщения и другой вывод. Когда компоновщику предлагается разобрать узел, он
пытается представить имена символов в удобочитаемой форме: он удаляет
ведущие подчеркивания, если они используются форматом объектного файла, и
преобразует искаженные имена символов C ++ в имена, читаемые пользователем.
У разных компиляторов разные стили манипуляции. Необязательный
аргумент стиля разборки может использоваться для выбора подходящего
разборчивый стиль для вашего компилятора. Компоновщик будет демонтировать
по умолчанию, если переменная среды COLLECT_NO_DEMANGLE установлен.
Эти параметры могут использоваться для отмены значения по умолчанию.
-Iфайл
--dynamic-linker =файл
Задайте имя динамического компоновщика. Это имеет смысл только тогда, когда
создание динамически связанных исполняемых файлов ELF. Динамический по умолчанию
компоновщик обычно правильный; не используйте это, если вы не знаете, что вы
делаем.
--no-динамический компоновщик
При создании исполняемого файла опускайте запрос динамического
компоновщик, который будет использоваться во время загрузки. Это имеет значение только для ELF.
исполняемые файлы, которые содержат динамические перемещения и обычно требуют
код точки входа, который способен обрабатывать эти перемещения.
--фатальные-предупреждения
--нет-фатальных-предупреждений
Считайте все предупреждения ошибками. Поведение по умолчанию может быть
восстановлен с опцией --нет-фатальных-предупреждений.
--force-exe-суффикс
Убедитесь, что выходной файл имеет суффикс .exe.
Если успешно построенный полностью связанный выходной файл не имеет
суффикс ".exe" или ".dll", этот параметр заставляет компоновщик копировать
выходной файл в одноименный файл с суффиксом «.exe». Этот
опция полезна при использовании немодифицированных make-файлов Unix на
Хост Microsoft Windows, поскольку некоторые версии Windows не запускают
изображение, если оно не заканчивается суффиксом «.exe».
--gc-разделы
--no-gc-разделы
Включите сборку мусора неиспользуемых входных секций. Это игнорируется
на целевых объектах, которые не поддерживают эту опцию. Поведение по умолчанию
(невыполнение этой сборки мусора) может быть восстановлено с помощью
указав --no-gc-разделы в командной строке. Обратите внимание, что мусор
коллекция для целей формата COFF и PE поддерживается, но
реализация в настоящее время считается экспериментальной.
--gc-разделы решает, какие входные разделы используются, исследуя
символы и перемещения. Раздел, содержащий символ входа
и все разделы, содержащие символы undefined в командной строке
будут сохранены, как и разделы, содержащие символы, на которые ссылается
динамические объекты. Обратите внимание, что при создании общих библиотек
компоновщик должен предполагать, что имеется ссылка на любой видимый символ. Один раз
этот начальный набор разделов определен, компоновщик
рекурсивно помечает как использованный любой раздел, на который ссылаются их
переезды. Видеть --Вход и --неопределенный.
Этот параметр может быть установлен при частичном связывании (включен с помощью
вариант -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-не определено за исключением того, что он определяет
поведение, когда неопределенные символы находятся в общей библиотеке, а
чем обычный объектный файл. Это не влияет на то, насколько undefined
обрабатываются символы в обычных объектных файлах.
По умолчанию сообщается об ошибках для любых неопределенных символов.
упоминается в разделяемых библиотеках, если компоновщик используется для
создать исполняемый файл, но разрешить их, если используется компоновщик
для создания общей библиотеки.
Причины разрешения неопределенных ссылок на символы в общих
библиотеки, указанные во время компоновки, следующие:
· Общая библиотека, указанная во время компоновки, может не совпадать с
тот, который доступен во время загрузки, поэтому символ может
фактически разрешается во время загрузки.
· Есть некоторые операционные системы, например 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 настроен таким образом, вы можете использовать --формат вариант
чтобы указать двоичный формат для выходного объектного файла. Даже когда
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" будет использоваться, если он определен.
The -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
Найдите раздел в выходном файле по указанному абсолютному адресу
by 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, которые могут использовать скрипты версий для фильтрации
видимость символа в режиме автоэкспорта: любые отмеченные символы локальным in
сценарий версии не будет экспортирован.
- предупреждение-обыкновенный
Предупреждать, когда общий символ сочетается с другим общим символом или
с определением символа. Компоновщики Unix допускают это несколько небрежно
на практике, но компоновщики в некоторых других операционных системах этого не делают. Этот
опция позволяет найти потенциальные проблемы от объединения глобальных
символы. К сожалению, некоторые библиотеки C используют эту практику, поэтому вы
могут появляться предупреждения о символах в библиотеках, а также в
ваши программы.
Есть три вида глобальных символов, обозначенных здесь C
Примеры:
Int i = 1;
Определение, которое находится в разделе инициализированных данных
выходной файл.
внешний Int i;
Неопределенная ссылка, которая не выделяет место. Там
должно быть либо определением, либо общим символом для переменной
где-то.
Int i;
Обычный символ. Если есть только (один или несколько) общих
символы для переменной, она попадает в область неинициализированных данных
выходного файла. Компоновщик объединяет несколько общих символов
для той же переменной в один символ. Если они
разных размеров, выбирает самый большой размер. Компоновщик превращает
общий символ в декларацию, если есть определение
та же переменная.
The - предупреждение-обыкновенный опция может выдавать пять видов предупреждений. Каждый
предупреждение состоит из пары строк: первая описывает символ
только что встретился, а второй описывает предыдущий символ
встречаются с таким же именем. Один или оба из двух символов
будет обычным символом.
1. Превращение общего символа в ссылку, потому что есть
уже определение символа.
( ): warning: common of ` '
отменено по определению
( ): предупреждение: определено здесь
2. Превращение обычного символа в ссылку, потому что более поздний
встречается определение символа. Это то же самое, что и
предыдущий случай, за исключением того, что символы встречаются в
другой порядок.
( ): warning: определение ` '
преобладающий общий
( ): предупреждение: общий здесь
3. Объединение общего символа с предыдущим общим символом того же размера.
символ.
( ): предупреждение: несколько общих
из ` '
( ): предупреждение: предыдущее общее здесь
4. Объединение общего символа с предыдущим более крупным общим символом.
( ): warning: common of ` '
перекрывается более широким общим
( ): предупреждение: здесь больше распространенных
5. Объединение общего символа с предыдущим меньшим общим символом.
Это то же самое, что и в предыдущем случае, за исключением того, что символы
встречаются в другом порядке.
( ): warning: common of ` '
подавляя меньшее общее
( ): предупреждение: здесь меньше обычных
--warn-конструкторы
Предупреждать, если используются какие-либо глобальные конструкторы. Это полезно только для
несколько форматов объектных файлов. Для таких форматов, как COFF или ELF,
компоновщик не может обнаружить использование глобальных конструкторов.
--warn-несколько-GP
Предупреждать, если в выводе требуется несколько значений глобального указателя
файл. Это имеет значение только для определенных процессоров, таких как
Альфа. В частности, некоторые процессоры помещают константы с большими значениями в
специальный раздел. Специальный регистр (глобальный указатель) указывает
в середину этого раздела, чтобы можно было загрузить константы
эффективно через режим относительной адресации базового регистра. С
смещение в относительном режиме базового регистра фиксировано и относительно
small (например, 16 бит), это ограничивает максимальный размер константы
бассейн. Таким образом, в больших программах часто бывает необходимо использовать
несколько значений глобального указателя, чтобы иметь возможность адресовать все
возможные константы. Эта опция вызывает предупреждение.
всякий раз, когда возникает этот случай.
- предупреждать-раз
Предупреждать только один раз для каждого неопределенного символа, а не один раз для каждого символа.
модуль, который к нему относится.
--warn-раздел-выравнивание
Предупреждать, если адрес секции вывода изменился из-за
выравнивание. Обычно выравнивание задается входом
раздел. Адрес будет изменен только в том случае, если он явно не
указано; то есть, если в команде "РАЗДЕЛЫ" не указан
начальный адрес раздела.
--warn-shared-textrel
Предупреждать, если компоновщик добавляет DT_TEXTREL к общему объекту.
--warn-альтернативный-em
Предупреждать, если объект имеет альтернативный машинный код ELF.
--warn-неразрешенные-символы
Если компоновщик сообщает о неразрешенном символе (см.
вариант --неразрешенные-символы) обычно возникает ошибка.
Эта опция заставляет вместо этого генерировать предупреждение.
-error-unresolved-symbols
Это восстанавливает поведение компоновщика по умолчанию при создании ошибок.
когда он сообщает о неразрешенных символах.
- весь архив
Для каждого архива, указанного в командной строке после
- весь архив вариант, включить каждый объектный файл в архив в
ссылку, а не искать нужный объект в архиве
файлы. Обычно это используется для превращения архивного файла в общий
библиотека, заставляя каждый объект быть включенным в результирующий
общая библиотека. Эту опцию можно использовать более одного раза.
Два примечания при использовании этой опции из gcc: во-первых, gcc не знает
об этой опции, поэтому вы должны использовать -Wl, -whole-архив, Во-вторых,
не забудьте использовать -Wl, -no-весь-архив после вашего списка
архивы, потому что gcc добавит собственный список архивов в ваш
ссылка, и вы можете не захотеть, чтобы этот флаг влиял и на них.
--wrap =символ
Используйте функцию-оболочку для символ. Любая неопределенная ссылка на
символ будет преобразовано в "__wrap_условное обозначение". Любой undefined
ссылка на "__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
сжаты с использованием zlib. --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, что снова экономит память за счет удлинения
время выполнения компоновщика. Однако этого не происходит, если --хэш-размер
переключатель был использован.
The --reduce-memory-overheads переключатель также может использоваться для включения
другие компромиссы в будущих версиях компоновщика.
--build-id
--build-id =стиль
Запросите создание раздела примечания ELF ".note.gnu.build-id" или
раздел COFF ".buildid". Содержание заметки уникально
биты, идентифицирующие этот связанный файл. стиль можно использовать "uuid" 128
случайные биты, "sha1" для использования 160-битного хэша SHA1 на нормативном
части выходного содержимого, "md5" для использования 128-битного хеша MD5 на
нормативные части выходного содержимого, или "0xшестнадцатеричная строка " использовать
выбранная битовая строка, заданная как четное шестнадцатеричное число
цифры (символы «-» и «:» между парами цифр игнорируются).
If стиль опускается, используется "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
Для большинства целей префиксом символа по умолчанию является подчеркивание и
определяется в описании цели. По этой опции можно
отключить / включить префикс символа подчеркивания по умолчанию.
--экспорт-все-символы
Если задано, все глобальные символы в объектах, используемых для построения библиотеки DLL
будет экспортирован DLL. Обратите внимание, что это значение по умолчанию, если
в противном случае не было бы экспортируемых символов. Когда символы
явно экспортируется через файлы DEF или неявно экспортируется через
атрибуты функции, по умолчанию ничего больше не экспортируется
если не указан этот вариант. Обратите внимание, что символы «DllMain @ 12»,
«DllEntryPoint @ 0», «DllMainCRTStartup @ 12» и «impure_ptr» будут
не подлежат автоматическому экспорту. Также символы, импортированные из других
Библиотеки DLL не будут повторно экспортироваться, равно как и символы, определяющие библиотеки DLL.
внутренний макет, например, начинающийся с "_head_" или заканчивающийся
с "_iname". Кроме того, никаких символов из "libgcc", "libstd ++",
«libmingw32» или «crtX.o» будут экспортированы. Символы, чьи имена
начинаться с «__rtti_» или «__builtin_» не будут экспортированы, чтобы помочь
с C ++ DLL. Наконец, есть обширный список cygwin-
частные символы, которые не экспортируются (очевидно, это относится к
при создании библиотек DLL для целей cygwin). Эти cygwin-excludes:
"_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
компоновщик]
- куча резерв
- куча резерв,совершать
Укажите количество байтов памяти для резервирования (и, при необходимости,
commit), который будет использоваться в качестве кучи для этой программы. По умолчанию 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 файл
Компоновщик создаст файл файл который будет содержать импорт
lib, соответствующую библиотеке DLL, которую создает компоновщик. Этот импорт
lib (который следует называть "* .dll.a" или "* .a" может использоваться для ссылки
клиенты против сгенерированной DLL; такое поведение делает возможным
чтобы пропустить отдельный шаг создания библиотеки импорта "dlltool". [Этот
опция специфична для целевого порта i386 PE компоновщика]
--enable-auto-image-base
--enable-auto-image-base =ценностное
Автоматически выбирать основу образа для DLL, при необходимости запускать
с базой ценностное , если только один не указан с помощью "--image-base"
аргумент. Используя хеш, сгенерированный из имени библиотеки, для создания
уникальные базы изображений для каждой DLL, коллизии в памяти и
перемещений, которые могут задержать выполнение программы, избегают. [Этот
опция специфична для целевого порта i386 PE компоновщика]
--disable-auto-image-base
Не создавайте автоматически уникальную основу изображения. Если нет
указанная пользователем база изображений ("--image-base"), затем используйте платформу
дефолт. [Этот параметр относится к целевому порту i386 PE
компоновщик]
--dll-поиск-префикс string
При динамическом связывании с dll без библиотеки импорта выполните поиск
за " .dll "вместо" lib .dll ".
Такое поведение позволяет легко различать библиотеки DLL, созданные для
различные "подплатформы": native, cygwin, uwin, pw и т. д.
Например, библиотеки DLL cygwin обычно используют "--dll-search-prefix = cyg".
[Этот параметр относится к целевому порту i386 PE
компоновщик]
--включить автоматический импорт
Сделайте сложную привязку "_symbol" к "__imp__symbol" для ДАННЫХ
импортирует из DLL и создает необходимые символы перехода, когда
создание библиотек импорта с этими экспортируемыми ДАННЫМИ. Примечание: использование
расширение 'auto-import' вызовет текстовую часть
файл изображения, который нужно сделать доступным для записи. Это не соответствует требованиям PE-
Спецификация формата COFF, опубликованная Microsoft.
Примечание. Использование расширения "автоимпорт" также приведет к только чтению.
данные, которые обычно помещаются в раздел .rdata, чтобы
вместо этого помещается в раздел .data. Это для того, чтобы работать
вокруг проблемы с константами, которая описана здесь:
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
Использование "автоимпорта" обычно "просто работает", но иногда вы
может увидеть это сообщение:
"переменная" не может быть импортирована автоматически. Прочтите
документация для ld's "--enable-auto-import" для подробностей. "
Это сообщение появляется, когда некоторое (под) выражение обращается к адресу
в конечном итоге определяется суммой двух констант (таблицы импорта Win32
разрешить только один). Случаи, когда это может произойти, включают доступы
в поля-члены структурных переменных, импортированных из DLL, а также
как использование постоянного индекса в переменной массива, импортированной из
DLL. Любая многословная переменная (массивы, структуры, long long и т. Д.) Может
вызвать это состояние ошибки. Однако независимо от точного
тип данных экспортируемой переменной, вызывающей нарушение, ld всегда обнаруживает
это, выдайте предупреждение и выйдите.
Есть несколько способов решить эту проблему, независимо от того,
тип данных экспортируемой переменной:
Один из способов - использовать переключатель --enable-runtime-pseudo-reloc. Это оставляет
задача настройки ссылок в вашем клиентском коде для выполнения
среда, поэтому этот метод работает только тогда, когда среда выполнения
поддерживает эту функцию.
Второе решение - заставить одну из «констант» быть
переменная - то есть неизвестная и не оптимизируемая во время компиляции.
Для массивов есть две возможности: а) сделать индексируемым (
адрес массива) переменная, или б) сделать "постоянный" индекс a
Переменная. Таким образом:
внешний тип extern_array [];
extern_array [1] ->
{изменчивый тип * t = extern_array; т [1]}
or
внешний тип extern_array [];
extern_array [1] ->
{изменчивый int t = 1; extern_array [t]}
Для структур (и большинства других многословных типов данных) единственный вариант
состоит в том, чтобы сделать саму структуру (или 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}
Третий метод решения этой проблемы - отказаться от
'auto-import' для оскорбительного символа и пометьте его
«__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
раздел, то есть импорт ДАННЫХ из DLL с ненулевым смещением, это
switch создаст вектор «псевдоперемещений времени выполнения», который
может использоваться средой выполнения для корректировки ссылок на такие
данные в вашем клиентском коде. [Эта опция специфична для i386 PE
целевой порт компоновщика]
--disable-runtime-псевдо-релок
Не создавайте псевдоперемещения для импорта ДАННЫХ с ненулевым смещением
из DLL. [Этот параметр относится к целевому порту i386 PE
линкера]
--enable-extra-pe-debug
Показать дополнительную отладочную информацию, связанную с преобразованием символов автоматического импорта.
[Этот параметр относится к целевому порту i386 PE
компоновщик]
--section-выравнивание
Устанавливает выравнивание раздела. Разделы в памяти всегда будут начинаться
по адресам, кратным этому числу. По умолчанию
0x1000. [Этот параметр относится к целевому порту i386 PE
компоновщик]
--куча резерв
--куча резерв,совершать
Укажите количество байтов памяти для резервирования (и, при необходимости,
commit), который будет использоваться в качестве стека для этой программы. По умолчанию 2 МБ.
зарезервировано, 4К зафиксировано. [Эта опция специфична для i386 PE
целевой порт компоновщика]
--подсистема , которые
--подсистема , которые:основной
--подсистема , которые:основной.небольшая
Задает подсистему, в которой будет выполняться ваша программа. В
правовые значения для , которые являются "родными", "windows", "console", "posix",
и «xbox». При желании вы также можете установить версию подсистемы.
Числовые значения также принимаются для , которые. [Этот вариант
специфичен для целевого порта компоновщика i386 PE]
Следующие параметры устанавливают флаги в поле «DllCharacteristics».
заголовка PE-файла: [Эти параметры относятся к PE, предназначенной для
порты компоновщика]
- высокая энтропия-ва
Изображение совместимо с 64-битной рандомизацией разметки адресного пространства.
(АСЛР).
--динамическая база
Базовый адрес изображения можно переместить с помощью макета адресного пространства.
рандомизация (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" копируются в
выходной файл.
The --no-merge-exidx-записи переключатель отключает слияние
смежные записи exidx в информации о размотке кадра.
Линкеры 68HC11 и 68HC12 поддерживают определенные параметры для управления
отображение переключения банка памяти и генерация кода трамплина.
--батута
Эта опция отключает создание батута. По умолчанию
батут генерируется для каждой дальней функции, которая вызывается с помощью
инструкция "jsr" (это происходит, когда указатель на удаленную функцию
взят).
--банк-окно имя
Эта опция указывает компоновщику имя области памяти.
в ПАМЯТЬ спецификация, описывающая окно банка памяти.
Затем определение такой области используется компоновщиком для вычисления
пейджинг и адреса в окне памяти.
Следующие параметры поддерживаются для управления обработкой GOT.
генерация при линковке для целей 68К.
--got =напишите
Эта опция сообщает компоновщику, какую схему генерации GOT использовать.
напишите должен быть одним из одинарной, отрицательный, многоточечный or цель. Для
дополнительную информацию см. в разделе "Информация" для ld.
Следующие параметры поддерживаются для управления инструкцией microMIPS.
генерация при компоновке для целей MIPS.
--insn32
--no-insn32
Эти параметры управляют выбором инструкций microMIPS, используемых в
код, сгенерированный компоновщиком, например, в PLT или ленивый
привязка заглушек, или в релаксации. Если --insn32 используется, то
компоновщик использует только 32-битные кодировки инструкций. По умолчанию или если
--no-insn32 используются все кодировки инструкций, в том числе
По возможности, 16-битные.
ОКРУЖАЮЩАЯ СРЕДА
Вы можете изменить поведение ld с переменными окружения
«GNUTARGET», «LDEMULATION» и «COLLECT_NO_DEMANGLE».
"GNUTARGET" определяет формат объекта входного файла, если вы не используете -b
(или его синоним --формат). Его значение должно быть одним из имен BFD.
для формата ввода. Если в среде нет "GNUTARGET", ld
использует естественный формат цели. Если "GNUTARGET" установлен на
"default", то BFD пытается обнаружить входной формат, исследуя
двоичные входные файлы; этот метод часто бывает успешным, но есть потенциал
двусмысленности, так как не существует метода, гарантирующего, что магическое число
используется для указания форматов объектных файлов, является уникальным. Тем не менее
процедура настройки BFD в каждой системе помещает обычные
формат для этой системы первым в списке поиска, поэтому двусмысленность
решено в пользу условности.
"LDEMULATION" определяет эмуляцию по умолчанию, если вы не используете -m
вариант. Эмуляция может влиять на различные аспекты поведения компоновщика,
особенно скрипт компоновщика по умолчанию. Вы можете перечислить доступные
эмуляции с --подробный or -V параметры. Если -m вариант нет
используется, а переменная среды "LDEMULATION" не определена,
эмуляция по умолчанию зависит от того, как был настроен компоновщик.
Обычно компоновщик по умолчанию использует символы разборки. Однако если
"COLLECT_NO_DEMANGLE" установлен в среде, тогда он будет по умолчанию
чтобы не разбирать символы. Эта переменная среды используется в
аналогично программой-оболочкой компоновщика "gcc". По умолчанию может
быть отвергнутым - распутать и --no-разбирать настройки.
Используйте i686-linux-gnu-ld.bfd в Интернете с помощью сервисов onworks.net