Линук / Уник наредба: Ид

НАМЕ

лд - Користећи ЛД , ГНУ линкер

СИНОПСИС

лд [ опције ] објфиле ...

ОПИС

лд комбинује више објеката и архивских датотека , премешта своје податке и повезује референце симбола. Обично последњи корак у састављању програма је покретање лд .

Лд прихвата језичке датотеке Линкер Цомманд написане у суперсету АТ & Т'с Линк Едитор Цомманд Лангуаге синтаксу, како би се обезбедила експлицитна и потпуна контрола над процесом повезивања.

Ова ман страница не описује командни језик; погледајте унос лд у "инфо" или приручник лд: ГНУ линкер, за све детаље о командном језику и другим аспектима линкера ГНУ.

Ова верзија лд користи библиотеке БФД опште намјене за рад на објектним датотекама. Ово омогућава лд читање, комбиновање и писање објекат датотека у различитим форматима --- нпр. ЦОФФ или "а.оут". Различити формати могу бити повезани заједно да би произвели било коју доступну врсту датотеке објекта.

Поред своје флексибилности, ГНУ линкер је кориснији од других линкера у пружању дијагностичких информација. Многи линкери напуштају извршење одмах након суочавања са грешком; кад год је то могуће, лд наставља да се извршава, омогућавајући вам да идентификујете друге грешке (или, у неким случајевима, да бисте добили излазну датотеку упркос грешкости).

ГНУ линкер лд треба да покрије широк спектар ситуација и да буде што је могуће компатибилнији са другим линкерима. Као резултат, имате много избора да контролишете своје понашање.

ОПЦИЈЕ

Линкер подржава мноштво опција командне линије , али у стварној пракси, мало њих се користи у одређеном контексту. На пример, честа употреба лд-а је повезивање стандардних Уник датотека датотека на стандардни, подржани Уник систем . У таквом систему, да бисте повезали датотеку "хелло.о":

лд -о <оутпут> /либ/црт0.о хелло.о -лц

Ово говори лд да произведе датотеку названу оутпут као резултат повезивања датотеке "/либ/црт0.о" са "хелло.о" и библиотеком "либц.а", која ће доћи из стандардних директорија за претраживање. (Погледајте дискусију о опцији испод.)

Неке опције командне линије за лд могу бити специфициране у било којој тачки у командној линији. Међутим, опције које се односе на датотеке, као што су или , доводе до тога да се датотека чита у тачки на којој се опција појављује у командној линији, у односу на датотеке објеката и друге опције датотеке. Понављање понуђених опција не-датотеке са другачијим аргументом неће имати никаквог додатног ефекта или преклонити претходне појаве (оне даље од леве стране у командној линији) те опције. Опције које се могу значајно одредити више од једном забележене су у описима испод.

Аргументи који нису опција су објектне датотеке или архиве које треба повезати заједно. Они могу следити, претходити или се мешати са опцијама командне линије, осим што аргумент о објектној датотеци не сме бити постављен између опције и његовог аргумента.

Обично се линкер позива са најмање једном објектном датотеком, али можете одредити друге облике бинарних улазних датотека користећи , и скриптни језик. Ако уопште нису наведене бинарне улазне датотеке, линкер не производи никакав излаз и издаје поруку Нема улазних датотека .

Ако линкер не може препознати формат датотеке објекта, претпоставља да је линкер скрипта. Скриптом који је наведен на овај начин повећава главну скрипту линкера која се користи за везу (било подразумевана скрипта линкера или она која је наведена уз помоћ ). Ова могућност дозвољава линкера да се повеже са датотеком која се чини предметом или архивом, али заправо само одређује неке вредности симбола или користи "ИНПУТ" или "ГРОУП" да учита друге објекте. Имајте на уму да спецификовање скрипте на овај начин само повећава главну скрипту линкера; користите опцију да бисте у потпуности заменили подразумевани скриптни линкер.

За опције чија су имена једно слово, аргументи опције морају или да прате опционо слово без интервенисања простора, или да буду дати као засебни аргументи одмах након опције која их захтева.

За опције чија су имена вишеструка слова, или једна померачка или два могу претходити називу опције; На пример, симбол траке и симбол траке су еквивалентни. Напомена - постоји изузетак од овог правила. Опције са више слова које почињу са малим словом "о" могу да пређу само две дирке. Ово смањује конфузију са опцијом . На пример, -омагиц поставља назив излазног фајла у магију док --омагиц поставља НМАГИЦ заставицу на излаз.

Аргументи опција са више слова морају бити одвојени од имена опције са једнаким знаком или се дају као засебни аргументи одмах након опције која их захтијева. На пример, - траг-симбол фоо и -траце-симбол = фоо су еквивалентни. Јединствене скраћенице имена опција са више слова су прихваћене.

Напомена - ако је линкер индиректно позван, помоћу управљачког програма за превођење (нпр. Гцц ), онда све опције командне линије линкера требају префиксати помоћу -Вл, (или било шта што одговара одређеном управљачу превођача) овако:

гцц -Вл, - стартгроуп фоо.о бар.о -Вл, - ендгроуп

Ово је важно, јер у супротном драјвер програма компајлера може тихо испустити опције линкера, што резултира лошим везом.

Овде је табела генеричких командних линија које је прихватио ГНУ линкер:

- кључна реч

Ова опција је подржана за ХП / УКС компатибилност. Аргумент кључне ријечи мора бити једна од архива стрингова , дијељена или подразумевана . -архива је функционално еквивалентна -Бстатици , а остале две кључне речи су функционално еквивалентне -Бодинамиц . Ова опција се може користити било који број пута.

- Архитектура

--арцхитецтуре = архитектура

У тренутном издању лд , ова опција је корисна само за породицу архитектуре Интел 960. У тој лд конфигурацији, аргумент архитектуре идентификује одређену архитектуру у породици 960, омогућавајући неке заштитне мјере и модификацију траке за претраживање архиве-библиотеке.

Будућа издања лд-а могу подржати сличну функционалност за друге породице архитектуре.

улазни формат

--формат = улазни формат

лд може бити конфигурисан да подржава више од једне врсте датотеке објекта. Ако је ваш лд подешен на овај начин, можете користити опцију да одредите бинарни формат за датотеке улазних објеката који прате ову опцију у командној линији. Чак и када је лд конфигурисан да подржава алтернативне формате датотека, обично вам није потребно да то одредите, јер би лд требало да буде конфигурисан да очекује као подразумевани формат уноса најобичнији формат на свакој машини. улазни формат је текстовни низ, назив одређеног формата који подржавају БФД библиотеке. (Можете да наведете доступне бинарне формате са објдумп -и .)

Можда желите да користите ову опцију ако повезујете датотеке са необичним бинарним форматом. Такође можете користити да бисте експлицитно пребацивали формате (приликом повезивања објектних датотека различитих формата), тако што ћете укључити улазни формат прије сваке групе датотека објеката у одређеном формату.

Подразумевани формат се узима из варијабле околине "ГНУТАРГЕТ".

Такође можете дефинисати формат уноса из скрипте, користећи команду "ТАРГЕТ";

МРИ-цоммандфиле

--мри-сцрипт = МРИ-цоммандфиле

За компатибилност са линкерима произведеним од стране МРИ-а, лд прихвата датотеке скрипта написане на алтернативном, ограниченом командном језику, описаном у одељку МРИ Цомпатибле Сцрипт Филес у ГНУ лд документацији. Увести МРИ скриптне датотеке са опцијом ; користите опцију да бисте покренули линкерске скрипте написане на језичком језику за општу сврху. Ако МРИ-цмдфиле не постоји, лд га тражи у директоријима специфицираним било којим опцијама.

-дц

-дп

Ове три опције су еквивалентне; више форми подржава компатибилност са другим линкерима. Они додјељују простор заједничким симболима чак и ако је специфицирана излазна датотека која се може премјестити (са ). Команда скрипта "ФОРЦЕ_ЦОММОН_АЛЛОЦАТИОН" има исти ефекат.

- улаз

- Ентри = улаз

Користите унос као експлицитан симбол за почетак извршавања вашег програма, а не подразумевана улазна тачка. Ако нема уноса названог симбола, линкер ће покушати парсе улазак као број и користити га као улазну адресу (број ће се тумачити у бази 10, можете користити водећи за базу 16 или водећи 0 за базу 8).

--екпорт-динамиц

Када креирате динамички повезану извршну датотеку, додајте све симболе динамичној таблици симбола. Динамичка табела симбола је скуп симбола који су видљиви од динамичких објеката у току рада.

Ако не користите ову опцију, динамичка таблица симбола ће обично садржавати само оне симболе на које се односи неки динамички објекат наведен у вези.

Ако користите "длопен" за учитавање динамичког објекта који треба да се односи на симболе које је дефинисао програм, а не неки други динамички објект, вероватно ћете морати користити ову опцију када повезујете сам програм.

Такође можете користити скрипту верзије да контролишете који симболи треба додати у динамичку табелу симбола ако је излазни формат подржава. Погледајте опис --версион-скрипта у @ реф {ВЕРСИОН}.

-ЕБ

Повежите велике ендијанске објекте. Ово утиче на подразумевани формат излаза.

-ЕЛ

Повежите мале-ендијске објекте. Ово утиче на подразумевани формат излаза.

--оксиларно име

Када креирате ЕЛФ заједнички објекат, подесите интерно поље ДТ_АУКСИЛИАРИ на одређено име. Ово говори динамичком повезивачу да се таблица симбола заједничког објекта користи као помоћни филтер на таблици симбола назива заједничког објекта.

Ако касније повежете програм против овог објекта филтера, онда, када покренете програм, динамички линкер ће видети поље ДТ_АУКСИЛИАРИ. Ако динамички линкер решава било који симбол из објекта филтера, прво ће проверити да ли постоји дефиниција у имену заједничког објекта. Ако постоји, користиће се уместо дефиниције у објекту филтера. Име заједничког објекта не мора да постоји. Због тога се заједничко име објекта може користити за пружање алтернативне имплементације одређених функција, можда за дебаговање или за појединачне перформансе машине.

Ова опција се може навести више од једном. ДТ_АУКСИЛИАРИ уноси ће бити креирани по редоследу на који се појављују на командној линији.

име

- име филма

Када креирате ЕЛФ заједнички објекат, подесите интерно поље ДТ_ФИЛТЕР до наведеног имена. Ово говори динамичком повезивачу да се таблица симбола дељеног објекта који се креира користи као филтер на таблици симбола назива заједничког објекта.

Ако касније повежете програм против овог објекта филтра, онда, када покренете програм, динамички линкер ће видети поље ДТ_ФИЛТЕР. Динамички линкер ће решити симболе према таблици симбола објекта филтера као и обично, али ће се уствари повезати са дефиницијама које се налазе у имену заједничког објекта. Тако се објект филтера може користити за одабир подскупа симбола датог од стране имена објекта.

Неки старији линкери су користили опцију у читавом алату за компилацију за спецификацију формат датотеке објекта и за датотеке улазних и излазних објеката. ГНУ линкер користи друге механизме за ову сврху: опције , -формат , -оформат , команду "ТАРГЕТ" у линкер скриптама и варијаблу окружења "ГНУТАРГЕТ". ГНУ линкер ће игнорисати опцију када не креира ЕЛФ заједнички објекат.

-фини име

Када креирате ЕЛФ извршни или заједнички објекат, позовите НАМЕ када је извршни или заједнички објекат истоваран, постављањем ДТ_ФИНИ на адресу функције. По дефаулту, линкер користи "_фини" као функцију за позивање.

Игнорисано. Обезбеђена компатибилност са другим алатима.

вредност

--гпсизе = вредност

Поставите максималну величину објеката за оптимизацију помоћу ГП регистра до величине . Ово је значајно само за формате фајлова објеката као што је МИПС ЕЦОФФ који подржава стављање великих и малих објеката у различите секције. Ово се игнорише за друге формате датотека објекта.

име

-самон = име

Када креирате ЕЛФ заједнички објекат, подесите интерно ДТ_СОНАМЕ поље на одређено име. Када је извршна датотека повезана са заједничким објектом који има поље ДТ_СОНАМЕ, онда када се извршава извршни програм, динамички линкер ће покушати да учита дељени објекат који је наведен у пољу ДТ_СОНАМЕ умјесто да користи име датотеке дату линкер-у.

Изведите инкременталну везу (исто као и опција ).

-више име

Када креирате ЕЛФ извршни или дељени објекат, позовите НАМЕ када се изврши учитавање извршеног или дељеног објекта, постављањем ДТ_ИНИТ на адресу функције. По дефаулту, линкер користи "_инит" као функцију за позивање.

архива

--либрари = архива

Додајте архиву архиве архива на листу фајлова за повезивање. Ова опција се може користити било који број пута. лд ће претражити своју путању за појаве "либарцхиве.а" за сваку наведену архиву .

На системима који подржавају дијељене библиотеке, лд такође може претраживати библиотеке са додатцима различитим од ".а". Конкретно, на ЕЛФ и СунОС системима, лд ће претражити директориј за библиотеку са продужетком ".со" пре него што потражите једну са наставком ".а". По договору, екстензија ".со" означава заједничку библиотеку.

Линкер ће претражити архиву само једном, на локацији на којој је наведена на командној линији. Ако архива дефинира симбол који је недефинисан у неком објекту који се појавио пре архиве у командној линији, линкер ће укључити одговарајуће датотеке из архиве. Међутим, недефинисан симбол у објекту који се појављује касније на командној линији неће узроковати линкеру да поново претражује архиву.

Погледајте - ( опција за начин присиљавања линкера за претрагу архива више пута.

Можете истаћи исту архиву више пута у командној линији.

Ова врста претраживања архиве је стандардна за линкере Уника. Међутим, ако користите лд онАИКС, имајте на уму да се разликује од понашања АИКС линкера.

сеарцхдир

--либрари-патх = сеарцхдир

Додајте путању сеарцхдир на листу путања које ће претраживати библиотеке архива и контролне скрипте лд . Ову опцију можете користити било који број пута. Директоријуми се претражују по редоследу у којем су наведени у командној линији. Директоријуми који су наведени у командној линији претражују се пре подразумеваних директорија. Све опције -Л се примјењују на све опције , без обзира на врсту у којој се појављују опције.

Ако сеарцхдир почиње са "=", онда ће "=" бити замијењен сисроот префиксом , путања која је одређена када је линкер конфигурисан.

Подразумевани скуп претраживаних путања (без навођења са ) зависи од тога који начин емулације лд користи, ау неким случајевима и од начина на који је конфигурисан.

Стазе се такође могу навести у скрипти везе помоћу "СЕАРЦХ_ДИР" наредбе. Директоријуми који су наведени на овај начин претражују се на тачки на којој се појављује скрипта линкера у командној линији.

емулација

Емулирајте линкерску емулацију . Можете да наведете доступне емулације помоћу опција --вербосе или .

Ако се опција не користи, емулација се узима из варијабле околине "ЛДЕМУЛАТИОН", ако је то дефинирано.

У супротном, подразумевана емулација зависи од тога како је линкер конфигурисан.

--принт-карта

Штампајте мапу веза на стандардни излаз. Мапа везе садржи информације о вези, укључујући следеће:

*

Гдје су објектне датотеке и симболи мапирани у меморију.

*

Колико су обични симболи додијељени.

*

Сви чланови архиве укључени су у везу, уз помињање симбола који је доводио члан архива.

--магиц

Искључите поравнање делова и означите излаз као "НМАГИЦ" ако је могуће.

--омагиц

Поставите одељак текста и података да би могли читати и писати. Такође, не поравнајте сегмент података и поравнајте везу са дељеним библиотекама. Ако излазни формат подржава магичне бројеве Уник стилова, означите излаз као "ОМАГИЦ".

--но-омагиц

Ова опција негира већину ефеката опције . Он поставља одјељак текста само за читање и присиљује сегмент података да буде поравнато са стране. Напомена - ова опција не омогућава повезивање са дељеним библиотекама. Употреби -Бодинамиц за ово.

излаз

--оутпут = излаз

Користите излаз као назив за програм произведен од лд ; ако ова опција није наведена, назив а.оут се користи подразумевано. Команда скрипта "ОУТПУТ" може такође одредити назив излазне датотеке.

ниво

Ако је ниво нумеричке вредности веће од нуле, лд оптимизује излаз. Ово би могло трајати знатно дуже и зато вероватно треба омогућити само за последњу бинарну.

- емит-релоцс

Оставите делове и садржај пресељења у потпуно повезане извршне предмете. Анализу линкова за линк и алатке за оптимизацију можда ће бити потребне ове информације како би се извршиле исправне измјене извршних програма. Ово резултира већим извршним програмима.

Ова опција је тренутно подржана само на ЕЛФ платформама.

- смешно

Генеришите релоцатабле оутпут --- тј. Генеришите излазну датотеку која заузврат служи као улаз за лд . Ово се често назива делимично повезивање . Као нежељени ефекат, у окружењима која подржавају стандардне магичне бројеве Уника, ова опција такође поставља магични број излазне датотеке на "ОМАГИЦ". Ако ова опција није наведена, направи се апсолутна датотека. Када повезујете Ц ++ програме, ова опција неће ријешити референце за конструкторе; да то урадите, користите -Ур .

Када улазна датотека нема исти формат као излазна датотека, делимично повезивање се подржава само ако та улазна датотека не садржи пресељења. Различити излазни формати могу имати даља ограничења; на пример неки формати засновани на "а.оут" не подржавају делимично повезивање са улазним датотекама у другим форматима.

Ова опција чини исто што и .

филенаме

--јуст-симболс = филенаме

Прочитајте називе симбола и њихове адресе из имена датотеке , али немојте га премештати или укључивати на излаз. Ово омогућава вашој излазној датотеци да симболично упути апсолутне локације меморије дефинисане у другим програмима. Ову опцију можете користити више пута.

За компатибилност са другим ЕЛФ линкерима, ако опцији прати име директоријума, а не име датотеке, третира се као опција -рпатх .

-стрип-све

Испустите све информације о симболу из излазне датотеке.

--стрип-дебуг

Изоставити податке симбола дебагера (али не и све симболе) из излазне датотеке.

- траце

Штампајте имена улазних датотека док их лд обрађује.

сцриптфиле

--сцрипт = сцриптфиле

Користите сцриптфиле као линкер скрипту. Овај скрипт замењује лд -ову дефаулт скрипту за линкере (уместо да му се додају), тако да командна датотека мора навести све што је потребно за описивање излазне датотеке. Ако сцриптфиле не постоји у тренутном директоријуму, "лд" га тражи у директоријима наведеним у било којој претходној опцији -Л . Мноштво опција се акумулира.

симбол

--ундефинед = симбол

Симбол силе треба унети у излазну датотеку као недефинисан симбол. То може, на пример, покренути повезивање додатних модула са стандардним библиотекама. може се поновити са различитим аргументима опције за унос додатних недефинисаних симбола. Ова опција је еквивалентна наредби "ЕКСТЕРН" линкера скрипта.

-Ур

За било шта осим програма Ц ++ ова опција је еквивалентна : она генерише релоцатабле оутпут --- тј. Излазну датотеку која заузврат служи као улаз за лд . Када повезујете Ц ++ програме, -Ур решава референцу на конструкторе, за разлику од . Не ради за кориштење -Ур на фајловима који су сами повезани са -Ур ; када је изграђен стол конструктор, не може се додати. Користите -Ур само за последњу делимичну везу, и за остале.

--уникуе [= СЕЦТИОН ]

Ствара одвојени излазни део за сваки одељак за унос који се подудара са Секцијом , или ако недостаје опционални СЕЦТИОН аргумент за дијалога, за сваки одељак за улаз у сирочад. Одјељак за сирочад је један који се посебно не помиње у линкер скрипти. Ову опцију можете користити више пута у командној линији; Он спречава нормално спајање улазних секција са истим именом, преклапајући задатке излазног одсека у линкер скрипту.

- верзија

Приказати број верзије за лд . Опција такође наводи подржане емулације.

-Икс

-дискард-све

Обришите све локалне симболе.

-ИКС

- лоцалс-лоцалс

Обришите све привремене локалне симболе. За већину мете, то су сви локални симболи чије се имена почињу са Л.

симбол

- траце-симбол = симбол

Одштампајте име сваке повезане датотеке у којој се појављује симбол . Ова опција се може давати било који број пута. На многим системима потребно је направити подвлаке.

Ова опција је корисна када у вашој линији имате недефинисан симбол, али не знате одакле долази референца.

- Пут

Додајте пут до подразумеване путање за претрагу библиотеке. Ова опција постоји за Соларис компатибилност.

кључна реч

Препознате кључне речи су "инитфирст", "интерпосе", "лоадфлтр", "нодефаултлиб", "ноделете", "нодлопен", "нодумп", "нов", "оригин", "цомбрелоц", "ноцомбрелоц" и "ноцопирелоц ". Друге кључне речи су игнорисане за Соларис компатибилност. "инитфирст" означава објекат који се прво иницијализује током извршавања пре било ког другог објекта. "интерпосе" означава објекат на којем се његова табела симбола претвара пре свих симбола, али примарна извршна датотека. "лоадфлтр" означава објекат да се његове филте одмах обрађују током извршавања. "нодефаултлиб" обиљежава објекат који ће тражити зависности овог објекта игнорирати све подразумеване путање за претрагу библиотеке. "ноделете" означава да објекат не треба истоваривати у току извршавања. "нодлопен" означава објекат који није доступан за "длопен". "нодумп" означава да објекат не може бити бачен "длдумп". "сада" означава објекат са не-лазним везивањем за извршавање. "Порекло" означава објекат који може садржати $ ОРИГИН. "дефс" онемогућава недефинисане симболе. "мулдефс" дозвољава више дефиниција. "цомбрелоц" комбинује вишеструке релокације и сортира их како би омогућио динамички кеширање за претрагу.

"ноцомбрелоц" онемогућава комбиновање више секција. "ноцопирелоц" онемогућава производњу копија релокса.

- ( архива -)

- архива групе -енд-гроуп

Архива би требала бити списак архивских датотека . Могу бити експлицитна имена датотека или опција.

Наведене архиве се претражују више пута све док се не креирају нове недефинисане референце. Обично се архива тражи само једном у редоследу који је наведен у командној линији. Ако је симбол у тој архиви потребан да би се решио недефинисан симбол који се помиње од објекта у архиви која се касније појављује на командној линији, линкер не би могао ријешити ту референцу. Груписањем архива, сви се претражују више пута док се не ријеше све могуће референце.

Коришћење ове опције има значајан трошак перформанси. Најбоље је користити само када постоје неизбежне кружне референце између две или више архива.

- аццепт-ункновн-инпут-арцх

--но-прихватање-непознат-улаз-лук

Објашњава линкеру да прихвати улазне датотеке чија архитектура не може бити препозната. Претпоставка је да корисник зна шта раде и намјерно жели да се повеже у ове непознате улазне датотеке. Ово је подразумевано понашање линкера, пре издања 2.14. Подразумевано понашање из издања 2.14 надаље је одбацивање таквих улазних датотека, па је опција --аццепт-ункновн-инпут-арцх додат за враћање старог понашања.

-сертна кључна реч

Ова опција је игнорисана за СунОС компатибилност .

-Бодинамиц

-Да

-цалл_схаред

Веза против динамичких библиотека. Ово је значајно само на платформама за које су подијељене библиотеке подржане. Ова опција је обично подразумевана на таквим платформама. Различите варијанте ове опције су компатибилне са различитим системима. Ова опција можете користити више пута у командној линији: она утиче на претраживање библиотеке за опције које следе.

-Бгроуп

Поставите заставицу "ДФ_1_ГРОУП" у ставку "ДТ_ФЛАГС_1" у динамичном одељку. Ово доводи до тога да линкер за извршавање поступа са потраживањима у овом објекту и да се његове зависности извршавају само унутар групе. --но-недефинисан је имплицитан. Ова опција је значајна само на ЕЛФ платформама које подржавају дијељене библиотеке .

-Бастично

-Дн

-нон_схаред

-стати

Не повезујте се са дељеним библиотекама. Ово је значајно само на платформама за које су подијељене библиотеке подржане. Различите варијанте ове опције су компатибилне са различитим системима. Ова опција можете користити више пута у командној линији: она утиче на претраживање библиотеке за опције које следе.

-Библиографски

Када креирате заједничку библиотеку, везати референце на глобалне симболе дефиницији унутар дељене библиотеке, ако их има. Обично је могуће да програм повезан са дељеном библиотеком превазиђе дефиницију унутар дељене библиотеке. Ова опција је значајна само на ЕЛФплатформама које подржавају дијељене библиотеке.

- контролне секције

- без провере

Тражи линкера да не проверава адресе одељака након што су им додељени како би видели да ли постоје преклапања. Нормално, линкер ће извршити ову проверу, а ако пронађе било које преклапање, он ће произвести одговарајуће поруке о грешци. Линкер зна и даје додатке за делове у прекривачима. Подразумевано понашање се може вратити користећи прекидач командне линије - цхецк сецтионс .

--цреф

Излази са унакрсном референтном таблицом. Ако се генерише датотека мапе линкова, табела унакрсних референци се одштампа у датотеку мапе. У супротном, штампа се на стандардном излазу.

Формат табеле је намерно једноставан, тако да се може лако обрадити скриптом ако је потребно. Симболи су одштампани, сортирани по имену. За сваки симбол дата је листа имена датотека. Ако је симбол дефинисан, прва наведена датотека је локација дефиниције. Преостале датотеке садрже референце на симбол.

--но-дефине-цоммон

Ова опција спречава доделу адреса заједничким симболима. Команда скрипта "ИНХИБИТ_ЦОММОН_АЛЛОЦАТИОН" има исти ефекат.

Опција -но-дефине-цоммон омогућава раздвајање одлуке о додељивању адреса Цоммон симболима из избора типа излазног фајла; у супротном нон-релоцатабле оутпут оутпут сили додељује адресе Цоммон симболима. Коришћењем --но-дефине-цоммон омогућава заједничке симболе који се реферишу из дељене библиотеке да се доделе адресе само у главном програму. Ово елиминише неискориштени дупли простор у дељеној библиотеци, а такође спречава било какву конфузију око решавања погрешног дупликата када има много динамичких модула са специјализованим путањама за претрагу за резолуцију симбола.

--дефсим симбол = израз

Креирајте глобални симбол у излазној датотеци, који садржи апсолутну адресу коју даје израз . Ову опцију можете користити толико пута колико је потребно за дефинисање више симбола у командној линији. Ограничен облик аритметике је подржан за израз у овом контексту: можете дати хексадецималну константу или име постојећег симбола или користити "+" и "-" да бисте додали или одузели хексадецималне константе или симболе. Ако вам је потребан више елаборираних израза, размислите да користите линкер командни језик из скрипте. Напомена: између симбола не треба бити празног простора, знак једнакости (`` = '') и израз .

--демангле [= стил ]

- не-демангле

Ове опције контролишу да ли да демангирају имена симбола у порукама о грешци и другом излазу. Када се линкеру рече да демангира, покушава да презентира имена симбола на читљив начин: он прелази водећи подвучице ако их користи формат датотеке објекта, и претвара Ц ++ померена имена симбола у корисничка читљива имена. Различити компајлери имају различите начине манглинга. Опционални арганг аргумент за стил се може користити за одабир одговарајућег стилског размака за ваш компајлер. Линкер ће се подразумевано демангирати, осим ако није постављена променљива окружења ЦОЛЛЕЦТ_НО_ДЕМАНГЛЕ . Ове опције се могу користити за превазилажење подразумеване вредности.

- динамичко-линкер фајл

Подесите име динамичког линкера. Ово је значајно само када се генеришу динамички повезане ЕЛФ извршне датотеке. Подразумевани динамички линкер је обично тачан; не користите ово осим ако не знате шта радите.

--ембеддед-релоцс

Ова опција је значајна само када се повезује МИПС уграђени ПИЦ код, генерисан помоћу опције -мембеддед-пиц за ГНУ компајлер и асемблер. То доводи до тога да линкер креира табелу која се може користити у току рада како би се преселио било који податак који је статички иницијализован за вриједности показивача. За детаље погледајте код тестуите / лд-емпиц.

- фатална упозорења

Обришите сва упозорења као грешке .

- форце-еке-суффик

Уверите се да излазна датотека има .еке суфикс.

Ако успешно изграђена потпуно повезана излазна датотека нема " .еке " или " .длл " суфикс, ова опција присиљава линкера да копира излазну датотеку на једно од истог имена помоћу ".еке" суфикса. Ова опција је корисна када користите неизмењене Уник макефиле на хосту Мицрософт Виндовс, пошто неке верзије Виндовса неће покренути слику осим ако се не заврши са ".еке" суфиксом.

--но-гц-секције

--гц-секције

Омогућите сакупљање смећа неискориштених улазних секција. Не занемарује се на циљевима који не подржавају ову опцију. Ова опција није компатибилна са , нити треба да се користи са динамичким повезивањем. Подразумевано понашање (не извршавање ове збирке смећа ) може се вратити одређивањем --но-гц-секција на командној линији.

--помоћ

Штампајте сажетак опција командне линије на стандардном излазу и излазу.

- тражи помоћ

Штампајте сажетак свих циљних специфичних опција на стандардном излазу и излазу.

-Мап мапфиле

Штампај мапу веза у датотеку мапфиле . Погледајте опис опције , горе.

- не-држи-меморију

Нормално се оптимизује за брзину коришћења меморије тако што се кеширање табела симбола улазних датотека у меморији. Ова опција говори лд да се уместо тога оптимизује за коришћење меморије, преименујући таблице симбола по потреби. Ово може бити потребно ако се лд истиче из меморијског простора док повезујете велику извршну датотеку.

--но-недефинисан

-з дефс

Обично када се креира не-симболичка дијељена библиотека, недефинисани симболи су дозвољени и остављени да их реши помоћу извршног лоадер-а. Ове опције онемогућавају такве недефинисане симболе.

- мало-више-дефиниција

-з мулдефс

Обично када је симбол одређен више пута, линкер ће пријавити фаталну грешку. Ове опције омогућавају више дефиниција и користиће се прва дефиниција.

--аллов-схлиб-ундефинед

Дозволи недефинисане симболе у ​​дељеним објектима чак и када је подешено --но-ундефинед. Нето резултат ће бити да ће недефинисани симболи у редовним објектима и даље покренути грешку, али недефинисани симболи у дељеним објектима ће бити игнорисани. Имплементација но_ундефинед подразумева претпоставку да ће се линкер извршавања задавити на недефинисаним симболима. Међутим, постоји најмање један систем (БеОС) у којем су недефинисани симболи у дељеним библиотекама нормални, пошто их језгро обрађује у време учитавања како би одабрали која је функција најприкладнија за тренутну архитектуру. ИЕ динамички бира одговарајућу мемсет функцију. Очигледно је такође нормално да библиотеке које деле ХППА имају недефинисане симболе.

--но-ундефинед-верзија

Обично када симбол има недефинисану верзију, линкер ће га игнорисати. Ова опција онемогућава симболе са недефинисаним верзијама и уместо тога ће се издати фатална грешка.

- без упозорења

Обично лд ће дати грешку ако покушате да повежете улазне датотеке које су неусаглашене из неког разлога, можда зато што су они сакупљени за различите процесоре или за различите ендианије. Ова опција говори лд да би требало тихо дозволити такве могуће грешке. Ова опција треба користити само са пажњом, у случајевима када сте предузели неку посебну акцију која осигурава да су грешке повезивања неадекватне.

- не-цела-архива

Искључите ефекат опције - цела-архива за наредне архивске датотеке.

--ноинхибит-екец

Задржите извршну излазну датотеку кад год је и даље употребљива. Нормално, линкер неће произвести излазну датотеку ако се сусреће са грешкама током процеса везе; она излази без писања излазне датотеке када изда било какву грешку.

-ностдлиб

Само претражујте директоријуме библиотека који су изричито наведени у командној линији. Библиотекарски директоријуми наведени у линкер скриптама (укључујући линкер скрипте наведене у командној линији) се игноришу.

--формат излазног формата

лд може бити конфигурисан да подржава више од једне врсте датотеке објекта. Ако је ваш лд конфигурисан на овај начин, можете користити опцију -оформат да бисте одредили бинарни формат за датотеку излазног објекта. Чак и када је лд конфигурисан да подржава алтернативне формате датотека, обично вам није потребно да то одредите, јер лд треба да буде конфигурисан да производи као стандардни излазни формат најобичнији формат на свакој машини. оутпут-формат је текстовни низ, назив одређеног формата који подржавају БФД библиотеке. (Можете да наведете доступне бинарне формате са објдумп -и .) Команда скрипте "ОУТПУТ_ФОРМАТ" такође може одредити формат излаза, али ова опција је преписује.

-кмагиц

Ова опција је игнорисана за компатибилност са Линуком.

-Ки

Ова опција је игнорисана за СВР4 компатибилност.

--опусти се

Опција са машинским зависним ефектима. Ова опција је подржана само на неколико циљева.

На неким платформама, опција -релак врши глобалне оптимизације које постају могуће када линкер решава адресирање у програму, као што су опуштајући режими адресирања и синтетизовање нових инструкција у датотеки излазног објекта.

На неким платформама ове глобалне оптимизације везаних за везу могу учинити симболичко дебаговање извршне извршне датотеке немогуће. Ово је познато као случај за фамилију процесора Матсусхита МН10200 и МН10300.

На платформама где ово није подржано, --релак је прихваћен, али је игнорисан.

--ретаин-симболс-филе филенаме

Задржите само симболе наведене у датотеци филма , одбацујући све друге. име фајла је једноставно равна датотека, са једним именом симбола по линији. Ова опција је нарочито корисна у окружењима (као што је ВкВоркс) где се велика глобална таблица симбола акумулира постепено, како би се сачувала меморија за вријеме извршавања.

--ретаин-симболс-датотека не одбацује недефинисане симболе, нити симболе потребне за пресељења.

Можете само да наведете --ретаин-симболс-филе једном у командној линији. Она преклиње и .

-рпатх дир

Додајте директоријум у путању за претрагу библиотеке за извршавање. Ово се користи при повезивању ЕЛФекецутабле са дељеним објектима. Сви аргументи -рпатх су повезани и прослеђени су на линкер за извршавање, који их користи за лоцирање дијељених објеката у току извршавања. Опција -рпатх се такође користи када лоцирате дељене објекте који су потребни за дељене објекте који су експлицитно укључени у везу; погледајте опис опције -рпатх-линк . Ако се -рпатх не користи приликом повезивања извршног ЕЛФ-а, садржај промјенљивог окружења "ЛД_РУН_ПАТХ" ће се користити ако је дефиниран.

Опција -рпатх се такође може користити на СунОС-у. Подразумевано, на СунОС-у, линкер ће из свих опција који је дат. Ако се користи опција -рпатх , траса за претрагу за рунтиме ће се формирати искључиво помоћу опција -рпатх , игноришући опције . Ово може бити корисно када користите гцц, који додаје многе опције које могу бити на НФС монтираним датотечним системима.

За компатибилност са другим ЕЛФ линкерима, ако опцији прати име директоријума, а не име датотеке, третира се као опција -рпатх .

-рпатх-линк ДИР

Када користите ЕЛФ или СунОС, једна дељена библиотека може захтевати другу. Ово се догађа када линк "лд -схаред" укључује дијељену библиотеку као једну од улазних датотека.

Када линкер дође до овакве зависности када ради неадекватну, непредстављиву везу, аутоматски ће покушати да лоцира потребну дијељену библиотеку и укључи је у линк ако није експлицитно укључен. У том случају, опција -рпатх-линк одређује први сет директорија за претрагу. Опција -рпатх-линк може одредити секвенцу назива директорија или навођењем листе имена раздвојених колонијама, или појавом више пута.

Ова опција би требало користити са опрезом, јер она преклапа путања за претрагу која је можда била компилирана у заједничку библиотеку. У том случају могуће је ненамјерно користити неку другу поту за претрагу него што би линкер за извршавање могао учинити.

Линкер користи следеће путање за претраживање како би лоцирао потребне дијељене библиотеке.

1.

Сви директоријуми наведени од опција -рпатх-линк .

2.

Сви директоријуми наведени од опција -рпатх . Разлика између -рпатх и -рпатх-линк је да су директоријуми специфицирани опцијама -рпатх укључени у извршну датотеку и кориштени у вријеме извршавања, док опција -рпатх-линк делује једино на вријеме везе. То је само за изворне линкере.

3.

У систему ЕЛФ-а, уколико нису коришћене опције -рпатх и "рпатх-линк", претражите садржај променљиве окружења "ЛД_РУН_ПАТХ". То је само за изворне линкере.

4.

На СунОС-у, уколико опција -рпатх није коришћена, потражите било који директоријум наведен помоћу опција .

5.

За изворни линкер, садржај променљиве окружења "ЛД_ЛИБРАРИ_ПАТХ".

6.

За изворни ЕЛФ линкер, директорије у "ДТ_РУНПАТХ" или "ДТ_РПАТХ" дељене библиотеке претражују дељене библиотеке које су јој потребне. Ставке "ДТ_РПАТХ" се игноришу ако постоје уноси "ДТ_РУНПАТХ".

7.

Подразумевани директоријуми, обично / либ и / уср / либ .

8.

За изворни линкер на систему ЕЛФ, ако постоји датотека /етц/лд.со.цонф , листа директорија пронађених у тој датотеки.

Ако тражена дијељена библиотека није пронађена, линкер ће издати упозорење и наставити са везом.

-елек

-Божљиво

Креирајте заједничку библиотеку. Ово је тренутно подржано само на ЕЛФ, КСЦОФФ и СунОС платформама. На СунОС-у, линкер ће аутоматски креирати заједничку библиотеку ако се не користи опција и постоје недефинисани симболи у линку.

-сорт-цоммон

Ова опција говори лд да сортира обичне симболе по величини када их ставља у одговарајуће излазне секције. Прво додајте све оне бајт симболе, затим све два бајта, затим све четири бајта, а затим све остало. Ово је да се спријече празнине између симбола због ограничења поравнања.

--сплит-по-фајл [ величина ]

Слично као --сплит-би-релоц, али креира нови излазни део за сваку улазну датотеку када се достигне величина . величина подразумева величину од 1 ако није дата.

--сплит-би-релоц [ број ]

Покреће да креира додатне секције у излазној датотеци тако да ниједан одломак излаза у датотеци не садржи више од пресељења броја . Ово је корисно када се генеришу огромне покретне датотеке за преузимање у одређене језгре у реалном времену са форматом датотеке објекта ЦОФФ-а; јер ЦОФФцаннот представља више од 65535 пресељења у једном одељку. Имајте на уму да ово неће успјети са форматима датотека објеката који не подржавају произвољне дијелове. Линкер неће поделити појединачне одељке за унос за редистрибуцију, тако да ако један одломак за унос садржи више од премештања броја, један излазни део ће садржати толико премештања. бројање подразумеваних вриједности од 32768.

--статс

Израчунајте и прикажите статистику о раду линкера, као што су време извршавања и употреба меморије.

- традиционални формат

За неке циљеве, излаз лд је на неки начин различит од излаза неког постојећег линкера. Овај преклопник захтијева лд да користи традиционални формат умјесто.

На примјер, на СунОС-у, лд комбинира дуплиране уносе у табели симбола. Ово може смањити величину излазне датотеке са потпуним информацијама о отклањању грешака за више од 30 процената. Нажалост, програм СунОС "дбк" не може прочитати резултујући програм ("гдб" нема проблема). Прекидач -традиционалног формата говори лд да не комбинира дуплициране уносе.

--секција-старт сецтионнаме = орг

Пронађите одељак у излазном фајлу на апсолутној адреси датој од орг . Ову опцију можете користити толико пута колико је потребно за лоцирање више секција у командној линији. орг мора бити један хексадецимални интегер; за компатибилност са другим линкерима, можете спустити водећи обично повезани са хексадецималним вриједностима. Напомена: не треба бити празног простора између имена профила , знака са једнаким бројем знакова (`` = '') и орг .

-Тбсс орг

-Тдата орг

-Ткт орг

Користите орг као почетну адресу за --- респективно --- сегмент "бсс", "дата" или "тект" излазне датотеке. орг мора бити један хексадецимални интегер; за компатибилност са другим линкерима, можете спустити водећи обично повезани са хексадецималним вриједностима.

-длл-вербосе

- вербосе

Прикажите број верзије за лд и наведите подржане емулације линкера. Приказати које улазне датотеке могу и које се не могу отворити. Приказати линкер скрипту који користи линкер.

- версион-сцрипт = версион-сцриптфиле

Наведите име верзије скрипти за линкер. Ово се обично користи приликом креирања дијељених библиотека како би се одредиле додатне информације о хеирархији верзије за библиотеку која се креира. Ова опција је значајна само на ЕЛФ платформама које подржавају дијељене библиотеке.

- варн-цоммон

Упозорити када се заједнички симбол комбинује са другим заједничким симболом или са дефиницијом симбола. Уник линкери омогућавају ову донекле неуједначену праксу, али линкери на неким другим оперативним системима не. Ова опција вам омогућава да пронађете потенцијалне проблеме од комбиновања глобалних симбола. Нажалост, неке библиотеке Ц користе ову праксу, тако да можете добити упозорења о симболима у библиотекама као иу вашим програмима.

Постоје три врсте глобалних симбола, илустрованих овде примјерима Ц:

инт и = 1;

Дефиниција која се налази у иницијализованом одељку података излазне датотеке.

ектерн инт и;

Недефинисана референца, која не издваја простор. Мора постојати или дефиниција или заједнички симбол за варијаблу негде.

инт и;

Заједнички симбол. Ако постоје само (један или више) заједнички симболи за варијаблу, она се налази у неиницијализованом подручју података излазне датотеке. Линкер спаја више обичних симбола за исту варијаблу у један симбол. Ако су различите величине, он избацује највећу величину. Линкер претвара заједнички симбол у декларацију, ако постоји дефиниција исте варијабле.

Опција -варн-цоммон може произвести пет врста упозорења. Свако упозорење састоји се од пар редова: први описује управо симбол који се среће, а други описује претходни симбол са истим именом. Један или оба симбола биће заједнички симбол.

1.

Претварање заједничког симбола у референцу, јер већ постоји дефиниција за симбол.

<филе> (<сецтион>): упозорење: уобичајено од <симбол> преклапане по дефиницији <филе> (<сецтион>): упозорење: дефинисано овде

2.

Окретање заједничког симбола у референцу, јер се сазнаје каснија дефиниција симбола. Ово је исто као и претходни случај, осим што су симболи наишли у другом реду.

<филе> (<сецтион>): упозорење: дефиниција "<симбол>" превладавајућа заједничка <датотека> (<секција>): упозорење:

3.

Спајање заједничког симбола са претходним заједничким симболом исте величине.

<филе> (<сецтион>): упозорење: вишеструко често од `<симбол> '<филе> (<сецтион>): упозорење:

4.

Спајање заједничког симбола са претходним већим заједничким симболом.

<филе> (<сецтион>): упозорење: уобичајено од `<симбол> 'надређено већим заједничким <филе> (<сецтион>): упозорење:

5.

Спајање заједничког симбола са претходним мањим заједничким симболом. Ово је исто као и претходни случај, осим што су симболи наишли у другом реду.

<филе> (<сецтион>): упозорење: уобичајено од <симбол> који премашује мању заједничку <датотеку> (<одељак>): упозорење: овде је мање заједничко

--варн-конструктори

Упозорити ако се користе било који глобални конструктори. Ово је корисно само за неколико формата датотека датотека. За формате попут ЦОФФ или ЕЛФ, линкер не може открити употребу глобалних конструктора.

--варн-мултипле-гп

Упозорити ако је у излазној датотеки потребно више глобалних вредности показивача. Ово је значајно само за одређене процесоре, као што је Алпха. Конкретно, неки процесори стављају велике вредности у посебан одељак. Посебан регистар (глобални показивач) указује на средину овог одељка, тако да се константи могу ефикасно учитати путем режима релативног адресирања базног регистра. Пошто је офсет у релативном моду базног регистра фиксиран и релативно мали (нпр. 16 бита), ово ограничава максималну величину константног базена. Стога, у великим програмима, често је неопходно користити више глобалних вриједности показивача како би могле ријешити све могуће константе. Ова опција доводи до упозорења кад год се деси овај случај.

- упозорење-једном

Само једном упозорите на сваки недефинисан симбол, а не једном у модулу који се односи на њега.

--варн-сецтион-алигн

Упозорити ако је адреса излазног дела промијењена због поравнања. Уобичајено, поравнање ће бити подешено у одељку за унос. Адреса ће се променити само ако није експлицитно наведена; то јест, ако команда "СЕЦТИОНС" не одређује почетну адресу за одјељак.

- цела архива

За сваку архиву која се помиње у командној линији након опције - цела-архива , укључите сваку датотеку објекта у архиву у везу, а не тражити архиву за тражене датотеке објеката. Ово се обично користи да претвори архивску датотеку у дељену библиотеку, приморавајући сваки објекат да буде укључен у резултирајућу дијељену библиотеку. Ова опција се може користити више од једног пута.

Две белешке када користите ову опцију из гцц: Прво, гцц не зна за ову опцију, тако да морате користити -Вл, -како-архивирати . Друго, немојте заборавити да користите -Вл, -но-целу-архиву након листе архива, јер гцц ће додати своју листу архива у вашу везу и можда не желите да ова застава утиче и на њих.

--врап симбол

Користите функцију омота за симбол . Свака недефинисана референца на симбол ће бити ријешена на "__ врап_симбол". Свако недефинисано позивање на "__реал_симбол" биће решено да симболише .

Ово се може користити за обезбеђивање омота за системску функцију. Функција омотача треба назвати "__врап_симбол". Ако жели да позове системску функцију, требало би да позове "__ реал_симбол".

Ево тривијалног примера:

воид * __врап_маллоц (инт ц) {принтф ("примљен са% лд \ н", ц); повратак __реал_маллоц (ц); }

Ако повезујете други код са овом датотеком користећи --врап маллоц , онда ће сви позиви на "маллоц" позвати функцију "__врап_маллоц" умјесто тога. Позив на "__реал_маллоц" у "__врап_маллоц" ће назвати стварну "маллоц" функцију.

Можда желите да обезбедите функцију "__реал_маллоц", тако да ће везе без опције --врап успети. Ако ово урадите, не смете стављати дефиницију "__ реал_маллоц" у исту датотеку као "__врап_маллоц"; ако то урадите, асемблер може да реши позив пре него што линкер има прилику да га пребаци на "маллоц".

--енабле-нев-дтагс

--дизабле-нев-дтагс

Овај линкер може креирати нове динамичке ознаке у ЕЛФ-у. Али старији ЕЛФ системи их можда не разумију. Ако наведете --енабле-нев-дтагс , динамичке ознаке ће се креирати по потреби. Ако наведете --дисабле-нев-дтагс , неће се креирати нове динамичке ознаке. По дефаулту, нове динамичке ознаке нису креиране. Имајте на уму да су те опције доступне само за ЕЛФ системе.

Линкер и386 ПЕ подржава опцију -схаред , што доводи до тога да излаз буде динамички повезана библиотека (ДЛЛ) уместо нормалне извршне датотеке. Када користите ову опцију, треба назвати излаз "* .длл". Осим тога, линкер у потпуности подржава стандардне "* .деф" датотеке, које се могу специфицирати на линку командне линије као објектна датотека (уствари, треба да претходи архивима од којих извози симболе, да би се осигурало да се они повезују, баш као и нормална датотека објекта).

Поред опција заједничких за све циљеве, линкер и386 ПЕ подржава додатне опције командне линије које су специфичне за циљ и386 ПЕ. Опције које узимају вриједности могу бити одвојене од њихових вриједности било знаком простора или једнаким.

--адд-стдцалл-алиас

Ако се дају, симболи са стдцалл суфиксом (@ нн ) биће извезени као-ис, као и са уклоњеним суфиксом.

- датотека базе података

Користите датотеку као име датотеке у коју ћете сачувати основне адресе свих пресељења потребних за генерисање ДЛЛ-ова са дллтоол-ом .

- Длл

Направите ДЛЛ уместо редовне извршне датотеке. Такође можете користити -елити или одредити "ЛИБРАРИ" у датој ".деф" датотеки.

--енабле-стдцалл-фикуп

--дисабле-стдцалл-фикуп

Ако веза пронађе симбол који не може да реши, покушаће да уради `` фуззи линкинг '' тражењем другог дефинисаног симбола који се разликује само у формату имена симбола (цдецл вс стдцалл) и ријешити тај симбол помоћу повезивања на утакмицу. На пример, недефинисан симбол "_фоо" може бити везан за функцију "_фоо @ 12", или недефинисан симбол "_бар @ 16" може бити повезан са функцијом "_бар". Када линкер то уради, штампа упозорење, пошто обично не би требало да се повеже, али понекад би се увозним библиотекама генерисаним од ДЛЛ трећих страна можда требала ова функција бити корисна. Ако наведете --енабле-стдцалл-фикуп , ова функција је потпуно омогућена, а упозорења се не штампају. Ако наведете --дисабле-стдцалл-фикуп , ова функција је онемогућена и такве неусаглашености се сматрају грешкама.

--екпорт-алл-симболс

Ако се дају, сви глобални симболи у објектима који се користе за изградњу ДЛЛ-а биће извезени помоћу ДЛЛ-а. Имајте на уму да је ово подразумевано ако иначе не би било икаквих извожених симбола. Када се симболи експлицитно извозе помоћу ДЕФ датотека или се имплицитно извозе помоћу атрибута функције, подразумевано је да не извози било шта друго осим ако је ова опција дата. Имајте на уму да се симболи "ДллМаин @ 12", "ДллЕнтриПоинт @ 0", "ДллМаинЦРТСтартуп @ 12" и "импуре_птр" неће аутоматски извозити. Такође, симболи увезени из других ДЛЛ-ова неће бити поново извезени, нити ће симболи навести унутрашњи изглед ДЛЛ-а, као што су они који почињу са "_хеад_" или завршавају са "_инаме". Поред тога, неће бити извезени симболи из "либгцц", "либстд ++", "либмингв32" или "цртКс.о". Симболи чија имена почињу са "__ртти_" или "__буилтин_" неће се извозити, помоћу ДЛЛ-а за Ц ++. Коначно, постоји обимна листа цигвин-приватних симбола који се не извозе (очигледно, ово се односи на изградњу ДЛЛ-а за циљеве цигвин-а).

Ови цигвин-искључени су: "_цигвин_длл_ентри @ 12", "_цигвин_црт0_цоммон @ 8", "_цигвин_нонцигвин_длл_ентри @ 12", "_фмоде", "_импуре_птр", "цигвин_аттацх_длл", "цигвин_премаин0", "цигвин_премаин1", "цигвин_премаин2", "цигвин_премаин3 "и" енвирон ".

симбол симбола , симбол , симбол , симбол ...

Наводи листу симбола које не би требало аутоматски да се извозе. Имена симбола могу бити ограничене заповијима или колонама.

--екцлуде-либс либ , либ , ...

Одређује листу архивских библиотека из којих симболи не би требало аутоматски да се извозе. Имена библиотеке могу бити ограничене на записе или колоне. Навођење "--екцлуде-либс АЛЛ" искључује симболе у ​​свим архивским библиотекама из аутоматског извоза. Симболи који су изричито наведени у .деф датотеки и даље се извозе, без обзира на ову опцију.

- подешавање слике

Наведите поравнање датотеке. Секције у датотеци увек ће почети са исплаћивањима датотека које су вишеструки од овог броја. Ова подразумевана вредност је 512.

- резервни резерват

- резервисати резерву , извршити

Специфицирајте количину меморије која ће бити резервисана (и опционално извршити) која ће се користити као куп за овај програм. Подразумевано је 1Мб резервисано, 4К извршено.

- имиџ-базна вредност

Користите вредност као базу адресе вашег програма или ДЛЛ-а. Ово је најнижа меморијска локација која ће се користити када се програм или ДЛЛ учита. Да бисте смањили потребу за пресељењем и побољшањем перформанси ваших ДЛЛ-ова, свака би требала имати јединствену базу и не би се преклапала са било којим другим ДЛЛ-ом. Подразумевана вредност је 0к400000 за извршне датотеке, а 0к10000000 за ДЛЛ.

-килл-ат

Ако се дају, стдцалл суфиксе (@ нн ) ће бити уклоњене из симбола пре него што се извозе.

--мајор-слика-верзија вредности

Подешава главни број "верзија слике". Подразумева се на 1.

--мајор-ос-верзија вриједност

Подешава главни број `` верзија ос ''. Подразумева се на 4.

--мајор-подсистем-верзија вредности

Подешава главни број "верзије подсистема". Подразумева се на 4.

- вредност минора-слике-верзија

Подешава мањи број "верзија слике". Подразумева се на 0.

- вредност минора-ос-верзија

Подешава мањи број `` верзија ос ''. Подразумева се на 0.

-минор-подсистем-верзија вредности

Подешава мањи број `` подсистемске верзије ''. Подразумева се на 0.

--оутпут-деф фајл

Линкер ће креирати датотеку датотеке која ће садржати ДЕФ датотеку која одговара ДЛЛ-у који линкер генерише. Ова ДЕФ датотека (коју треба назвати "* .деф") може се користити за креирање увозне библиотеке са "дллтоол" или се може користити као референца за аутоматске или имплицитно извезене симболе.

--оут-имплиб фајл

Линкер ће креирати датотеку датотеке која ће садржати импорт либ који одговара ДЛЛ-у који линкер генерира. Овај увоз либ (који треба назвати "* .длл.а" или "* .а" може се користити за повезивање клијената против генерисаног ДЛЛ-а, ово понашање омогућава прескакање засебног корака креирања библиотеке увоза "дллтоол".

- енабле-ауто-имаге-басе

Аутоматски одаберите базу слика за ДЛЛ-ове, осим ако се не наведе помоћу аргумента "-имаге-басе". Коришћењем хасх-а генерисаног из дллнаме-а за креирање јединствене базе слике за сваки ДЛЛ-у, избјегавају се судари у меморији и пресељавања који могу одложити извршење програма.

--дисабле-ауто-имаге-басе

Немојте аутоматски генерирати јединствену базу слика. Ако нема корисничке базе слике ("-имаге-басе") онда користите подразумевану платформу.

стринг -длл-сеарцх-префик

Када динамично повезујете на длл без библиотеке увоза, потражите "<стринг> <басенаме> .длл" пре свега "либ <басенаме> .длл". Ово понашање омогућава лако разликовање између ДЛЛ-ова изграђених за различите подплатформе: нативе, цигвин, увин, пв итд. На примјер, цигвин ДЛЛ обично користе "--длл-сеарцх-префик = циг".

--енабле-ауто-импорт

Урадите софистицирано повезивање "_симбол" на "__имп__симбол" за ДАТА увоз из ДЛЛ-а, и креирајте потребне симболе за туне када изградите библиотеке увоза са тим ДАТАекпортс. Ово ће углавном "само радити" --- али понекад можда видите ову поруку:

"варијабла" <вар> не може се аутоматски увозити. Молимо прочитајте документацију за "--енабле-ауто-импорт" за лд. "

Ова порука се јавља када неки (под) експресија приступи адреси која се коначно даје сумом две константе (Вин32 табеле увоза дозвољавају само једну). Примери у којима се ово може десити укључују приступ члановима поља структурних варијабли увезених из ДЛЛ-а, као и кориштење константног индекса у варијаблу низова увезену из ДЛЛ-а. Свака променљива вишеструке речи (низови, структуре, дугачке, итд.) Могу покренути ову грешку. Међутим, без обзира на тачан тип података увредљиве извозне варијабле, лд ће га увијек открити, издати упозорење и изаћи.

Постоји неколико начина за решавање ове потешкоће, без обзира на врсту података извезене варијабле:

Један од начина је да користите --енабле-рунтиме-псеудо-релоц свитцх. Ово оставља задатак прилагођавања референци у вашем клијентском коду за радно окружење, тако да ова метода функционише само када је опција за извршавање подржава ову функцију.

Друго решење је да се једна од "константи" примени у варијанту - која је, непозната и не оптимизибилна у вријеме компајлирања. За низове постоје две могућности: а) индексира (адресу матрице) варијаблу, или б) чини 'константни' индекс променљивом. Тако:

ектерн типе ектерн_арраи []; ектерн_арраи [1] -> {волатиле типе * т = ектерн_арраи; т [1]}

или

ектерн типе ектерн_арраи []; ектерн_арраи [1] -> {волатиле инт т = 1; ектерн_арраи [т]}

За структуре (и већину других вишеслојних типова података) једина опција је да направите саму структуру (или дугу дугу, или ...) варијаблу:

ектерн струцт с ектерн_струцт; ектерн_струцт.фиелд -> {волатиле струцт с * т = & ектерн_струцт; т-> поље}

или

ектерн лонг лонг ектерн_лл; ектерн_лл -> {волатиле лонг лонг * лоцал_лл = & ектерн_лл; * лоцал_лл}

Трећи начин решавања ове потешкоће је да се напусти "ауто-импорт" за симбол који је увредио и означите га "__децлспец (дллимпорт)". Међутим, у пракси то захтијева кориштење #дефинес за вријеме компајлирања како би указао на то да ли правите ДЛЛ, изградњу кода клијента који ће се повезати с ДЛЛ-ом, или само изградња / повезивање са статичком библиотеком. Приликом избора између различитих метода решавања проблема "директне адресе са константним офсетом", требало би да узмете у обзир типичну употребу у реалном свету:

Оригинал:

--фоо.х ектерн инт арр []; --фоо.ц #инцлуде "фоо.х" воид маин (инт аргц, цхар ** аргв) {принтф ("% д \ н", арр [1]); }

Решење 1:

--фоо.х ектерн инт арр []; --фоо.ц #инцлуде "фоо.х" воид маин (инт аргц, цхар ** аргв) {/ * Ово решење је за вин32 и цигвин; не "оптимизуј" * / волатиле инт * парр = арр; принтф ("% д \ н", парр [1]); }

Решење 2:

--фоо.х / * Напомена: претпостављен је ауто-извоз (нема __децлспец (дллекпорт)) * / #иф (дефинисано (_ВИН32) || дефинисано (__ ЦИГВИН__)) && \! (дефинисано (ФОО_БУИЛД_ДЛЛ) || дефинирано (ФОО_СТАТИЦ )) #дефине ФОО_ИМПОРТ __децлспец (дллимпорт) #елсе #дефине ФОО_ИМПОРТ #ендиф ектерн ФОО_ИМПОРТ инт арр []; --фоо.ц #инцлуде "фоо.х" воид маин (инт аргц, цхар ** аргв) {принтф ("% д \ н", арр [1]); }

Четврти начин да се избегне овај проблем је да поновите кодирање ваше библиотеке да користи функционални интерфејс уместо интерфејс података за увредљиве варијабле (нпр. Сет_фоо () и гет_фоо () аццессор функције).

--дисабле-ауто-импорт

Не покушавајте да направите софистицирано повезивање "_симбол" на "__имп__симбол" за ДАТАимпортс из ДЛЛ-ова.

- тиме-рун-псеудо-релоц

Ако ваш код садржи изразе описане у одјељку --енабле-ауто-импорт, односно ДАТАимпортс из ДЛЛ-а са не-оффсетом, овај прекидач ће створити вектор 'псеудо-релокација за вријеме извршавања' који се може користити у околини извршавања за прилагођавање референци на такве податке у вашем клијентском коду.

--дизабле-рунтиме-псеудо-релоц

Немојте креирати псеудо релокације за нулте оффсет ДАТА увоз из ДЛЛ-ова. Ово је подразумевано.

- енабле-ектра-пе-дебуг

Покажите додатне информације о грешци у вези с аутоматским увозом симбола.

-секционо-поравнање

Подешавање поравнања одсека. Секције у меморији ће увек почети на адресама које су вишеструке од овог броја. Подразумева се на 0к1000.

- резервни резерват

- резервни резерват , изврши

Специфицирајте количину меморије која ће се резервисати (и опционално извршити) која ће се користити као стацк за овај програм. Подразумевана вредност је 2Мб резервирана, 4К извршена.

- сустав система који

- систем који : мајор

- систем који : мајор . минор

Одређује подсистем под којим ће ваш програм извршавати. Правне вредности за које су "нативе", "виндовс", "цонсоле" и "посик". Можете и опционо подесити верзију подсистема.

Важно: Користите команду човјека ( % човјек ) да бисте видели како се на вашем рачунару користи команда.