Linux / Unix команда: Id

NAME

ld - Користење на LD , GNU линк

СИНОПСИС

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

ОПИС

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

ld прифаќа Јазични датотеки на Linker Command, напишани во набљудувачка синтакса на AT & T's Editor Editor, за да обезбедат експлицитна и целосна контрола врз процесот на поврзување.

Оваа маш страница не го опишува командниот јазик; видете го влезот ld во "info" или прирачникот ld: линкот на GNU , за целосни детали за командниот јазик и за други аспекти на linkerGNU.

Оваа верзија на LD ги користи библиотеките за општа намена BFD да работат на објектните датотеки. Ова овозможува ld да ги чита, комбинира и запишува објектните датотеки во многу различни формати --- на пример, COFF или "a.out". Различни формати можат да бидат поврзани заедно за да се произведе било кој достапен вид објект датотека.

Настрана од неговата флексибилност, GNU линкер е покорисен од другите линкери во обезбедувањето на дијагностички информации. Многу линкери го напуштаат извршувањето веднаш откако ќе наидат на грешка; секогаш кога е можно, ld продолжува со извршување, овозможувајќи ви да идентификувате други грешки (или, во некои случаи, да добиете излезна датотека и покрај грешката).

GNU линкер ld е наменет да покрие широк спектар на ситуации и да биде што е можно покомпатибилен со други линкери. Како резултат на тоа, имате многу можности да го контролирате своето однесување.

ОПЦИИ

Линкер поддржува голем број на опции за командната линија , но во практиката, неколку од нив се користат во одреден контекст. На пример, честа употреба на ld е да ги поврзе стандардните Unix-датотеки со објект на стандарден, поддржан Unix систем . Во таков систем, за да поврзете датотека "hello.o":

ld -o /lib/crt0.o hello.o -lc

Ова им кажува на ld да произведе датотека наречена излез како резултат на поврзување на датотеката "/lib/crt0.o" со "hello.o" и библиотеката "libc.a", која ќе доаѓа од стандардните директориуми за пребарување. (Погледнете го дискусијата за опцијата -l подолу.)

Некои од опциите на командната линија за ld може да се наведат во било која точка во командната линија. Сепак, опциите што се однесуваат на датотеки, како што се -l или -T , предизвикуваат датотеката да се чита на точката во која опцијата се појавува во командната линија, во однос на објектните датотеки и други опции за датотеки. Повторувањето на не-датотечните опции со друг аргумент нема да има понатамошно влијание или ќе ги пребрише претходните појави (оние што се наоѓаат лево на командната линија) од таа опција. Опциите кои можат да бидат значително определени повеќе од еднаш се забележани во описите подолу.

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

Обично линкер се повикува со најмалку една објектна датотека, но можете да наведете други форми на бинарни влезни датотеки користејќи -l , -R , и командниот јазик на скрипта. Ако воопшто не се специфицирани бинарни влезни датотеки, линкер не произведува никаков излез и ја издава пораката No input files .

Ако врската не може да го препознае форматот на објектната датотека, ќе претпостави дека е линк-скрипта. Скриптата наведена на овој начин го зголемува главниот линк-скрипт што се користи за врската (или стандардната линк-скрипта или онаа наведена со користење -T ). Оваа опција дозволува линкер да се поврзе со датотека која се чини дека е објект или архива, но всушност само ги дефинира вредностите на симболите или користи "INPUT" или "GROUP" за да вчита други објекти. Имајте на ум дека одредувањето на сценариото на овој начин само го зголемува главниот линк скрипт; користете ја опцијата -T за целосно да го замени стандардниот линкер.

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

За опции чии имиња се повеќе букви, или една цртичка или две може да претходи на името на опцијата; на пример, симболот-трампа и симбол -trace се еквивалентни. Забелешка - постои еден исклучок од ова правило. Опциите за повеќе букви што почнуваат со мали букви "o" можат да се претпостават само со две цртички. Ова е за да се намали конфузијата со опцијата. Така на пример -магматично го поставува името на излезната датотека во магија, додека --магично го поставува знамето NMAGIC на излезот.

Аргументите за опциите со повеќе букви мора да бидат одделени од името на опцијата со знак за еднаквост или да бидат дадени како посебни аргументи веднаш по опцијата која ги бара. На пример, - foo-симбол-foo и -trace-symbol = foo се еквивалентни. Единствени кратенки на имињата на повеќекратните букви се прифаќаат.

Забелешка - ако линкер се повикува индиректно, преку двигател на компајлерот (на пр. Gcc ) тогаш сите опции на командната линија на линкер треба да бидат префиксни од -Wl, (или она што е соодветно за конкретниот двигател на компајлерот) вака:

gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroup

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

Еве една табела на генерички прекинувачи на командната линија прифатени од линкот GNU:

клучен збор

Оваа опција е поддржана за компатибилност со HP / UX. Аргументот за клучни зборови мора да биде една од архивите на стрингови , споделени или стандардно . -архив е функционално еквивалентен на -Bstatic , а другите две клучни зборови се функционално еквивалентни на -Bodynamic . Оваа опција може да се користи било кој број пати.

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

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

Во тековната верзија на ld , оваа опција е корисна само за Intel 960 семејството на архитектури. Во таа конфигурација ld , аргументите за архитектура ја идентификуваат конкретната архитектура во семејството 960, овозможувајќи некои заштитни мерки и модифицирање на патеката за пребарување во архивата.

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

-b влез-формат

--формат = влез-формат

ld може да биде конфигуриран да поддржува повеќе од еден вид објект датотека. Ако вашиот ld е конфигуриран на овој начин, можете да ја користите опцијата -b за одредување на бинарен формат за датотеките за влез објект што ја следат оваа опција на командната линија. Дури и кога LD е конфигуриран да поддржува форма на алтернативни објекти, обично не треба да го наведете ова, бидејќи ld треба да биде конфигуриран да очекува како стандарден влез формат највообичаен формат на секоја машина. влез-формат е текст стринг, името на одреден формат поддржан од BFD библиотеките. (Можете да ги наведете достапните бинарни формати со objdump -i .)

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

Стандардниот формат е земен од променливата на околина "GNUTARGET".

Исто така можете да го дефинирате формат на влез од скрипта, користејќи ја командата "TARGET";

-М МНР-командната датотека

--mri-script = MRI-commandfile

За компатибилност со линкери произведени од МРИ, ld прифаќа скриптни датотеки напишани на алтернативен, ограничен команден јазик, опишан во делот за компатибилни скрипти на МНР на ГНУ ld документацијата. Воведување МРИ скриптни датотеки со опција -c ; користете ја опцијата -T за да стартувате линк скрипти напишани во општа намена ld јазик за скриптирање. Ако МРИ-cmdfile не постои, ld го бара во директориумите специфицирани со било -L опции.

-d

-dc

-dp

Овие три опции се еквивалентни; повеќе формати се поддржани за компатибилност со други линкери. Тие доделуваат место за заеднички симболи, дури и ако е одредена премостлива излезна датотека (со -r ). Истата команда "FORCE_COMMON_ALLOCATION" го има истиот ефект.

- влез

- центар = запис

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

- извоз-динамичен

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

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

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

Исто така можете да ја користите скриптата за верзијата за да контролирате кои симболи треба да се додадат во динамичката табела на симболи ако излезниот формат го поддржува. Погледнете го описот на --верзија-скрипта во @ ref {VERSION}.

-EB

Поврзете големи-endian објекти. Ова влијае на стандардниот излез формат.

-EL

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

-f

- овошно име

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

Ако подоцна ја поврзете програмата против овој филтер објект, тогаш, кога ќе ја стартувате програмата, динамичниот линкер ќе го види полето DT_AUXILIARY. Ако динамичниот линкер ги разреши сите симболи од објектот на филтерот, прво ќе провери дали постои дефиниција во споделеното име на објектот. Доколку постои, ќе се користи наместо дефиницијата во објектот на филтерот. Името на споделен објект не мора да постои. Така, споделеното име на објектот може да се користи за да обезбеди алтернативна имплементација на одредени функции, можеби за дебагирање или за перформанси за конкретни машини.

Оваа опција може да биде одредена повеќе од еднаш. Влезните записи DT_AUXILIARY ќе бидат креирани по редоследот по кој се појавуваат на командната линија.

име

--сетофилтер

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

Ако подоцна ја поврзете програмата против овој предмет на филтерот, тогаш, кога ја стартувате програмата, динамичниот линкер ќе го види полето DT_FILTER. Динамичкиот линкер ќе ги разреши симболите според табелата со симболи на објектот на филтерот како и обично, но всушност ќе се поврзе со дефинициите што се наоѓаат во споделеното име на објектот. Така објектот на филтерот може да се користи за да се избере подмножество на симболите што се обезбедени од името на објектот.

Некои постари линкери ја користеа опцијата -F низ алатката за компилација за специфицирање на формат на датотека со објект и за влезните и за излезните датотеки. Линкот GNU користи други механизми за оваа намена: -b , -format , -oformat опции, команда "TARGET" во врските на скриптите и "GNUTARGET" променливата на околината. Линкот GNU ќе ја игнорира опцијата -F кога не создава заеднички објект ELF.

-имиња

Кога креирате ELF извршен или дели објект, јавете се NAME кога извршувањето или делиниот објект е растоварен, поставувајќи DT_FINI на адресата на функцијата. Стандардно, поврзувачот користи "_fini" како функција за повик.

-g

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

вредност

--gpsize = вредност

Поставете ја максималната големина на објекти што треба да се оптимизираат користејќи го GP регистерот за големината . Ова е значајно само за објектните формати, како што е MIPS ECOFF, кој поддржува ставање големи и мали објекти во различни делови. Ова е игнорирано за други формати на датотеки со објект.

име

-сомен = име

Кога креирате ELF заеднички објект, поставете го внатрешниот DT_SONAME поле до одреденото име. Кога извршната датотека е поврзана со споделен објект кој има DT_SONAME поле, а потоа кога е извршена извршната датотека, динамичкиот линкер ќе се обиде да го вчита делиниот објект определен од полето DT_SONAME, наместо да го користи името на датотеката дадена на линкер.

-i

Изведете поединечна врска (исто како и опцијата -r ).

-во име

Кога креирате ELF извршен или споделен објект, јавете се NAME кога е вчитан извршен или споделен објект, поставувајќи DT_INIT на адресата на функцијата. Стандардно, поврзувачот користи "_init" како функција за повик.

-l архива

- библиотека = архива

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

За системи кои поддржуваат споделени библиотеки, ld исто така може да бара библиотеки со екстензии различни од ".a". Поточно, на ELF и SunOS системите, ld ќе бара директориум за библиотека со продолжување на ".so" пред да побара еден со продолжување на ".a". Со конвенција, ".so" екстензијата покажува заедничка библиотека.

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

Погледнете - ( опција за начин да го натерате линкерот повеќе пати да пребарува архиви.

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

Овој тип пребарување на архиви е стандарден за линковите на Unix. Меѓутоа, ако користите ld onAIX, забележете дека е различен од однесувањето на линкот AIX.

-L searchdir

--библиотека-патека = пребарување

Додај патека searchdir на листата на патеки кои ld ќе ги пребаруваат библиотеките на архивите и ld контролните скрипти. Можете да ја користите оваа опција бројни пати. Директориумите се пребаруваат по редоследот во кој се наведени на командната линија. Директориумите наведени во командната линија се пребаруваат пред стандардните директориуми. Сите -L опции се однесуваат на сите -l опции, без оглед на редоследот по кој се појавуваат опциите.

Ако searchdir започне со "=", тогаш "=" ќе биде заменет со префиксот на sysroot , патеката одредена кога линкер е конфигуриран.

Стандардната патека што се пребарува (без да биде одредена со -L ) зависи од тоа кој режим на имиџот ld користи, а во некои случаи и за тоа како е конфигуриран.

Патеките исто така може да се специфицираат во врска со скриптата со командата "SEARCH_DIR". Специфицираните директориуми на овој начин се пребаруваат во точката во која линкската скрипта се појавува во командната линија.

-m емулација

Емитирајте го линк за емулација . Можете да ги наброите достапните емулации со опциите --verbose или -V .

Ако опцијата -m не се користи, емулацијата е земена од променливата на околината "LDEMULATION", ако тоа е дефинирано.

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

- Отпечаток-карта

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

*

Каде што објектните датотеки и симболите се мапирани во меморија.

*

Колку се користат заедничките симболи.

*

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

-n

--магично

Исклучете ја порамнувањето на страниците и означете го излезот како "NMAGIC" ако е можно.

-N

- сома

Поставете ги секциите за текст и податоци да може да се читаат и да се пишуваат. Исто така, не поврзувајте го податочниот сегмент и не дозволувајте поврзување со споделени библиотеки. Ако излезниот формат поддржува бројни магични бројки на Unix стилот, означете го излезот како "OMAGIC".

- не-омагичен

Оваа опција ги негира повеќето од ефектите на опцијата -N . Ја поставува текстуалната секција да биде само за читање и го принудува сегментот податоци да биде подреден на страницата. Забелешка - оваа опција не овозможува поврзување со споделени библиотеки. Користете -Бинамично за ова.

излез

--излез = излез

Користете го излезот како име за програмата произведена од ld ; ако оваа опција не е наведена, името a.out се користи стандардно. Командата за скрипта "OUTPUT" исто така може да го наведете името на излезната датотека.

ниво

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

-q

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

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

Оваа опција моментално е поддржана само на платформите ELF.

-r

- заговорлив

Генерирај пренослив излез --- т.е. генерира излезна датотека која за возврат може да служи како влез за ld . Ова често се нарекува делумно поврзување . Како несакан ефект, во средини кои поддржуваат стандардни Unix магични броеви, оваа опција исто така го поставува магичниот број на излезната датотека на "OMAGIC". Ако оваа опција не е наведена, се создава апсолутна датотека. Кога ги поврзува програмите C + +, оваа опција нема да ги референцира конструкторите; за да го направите тоа, користете -Ur .

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

Оваа опција го прави истото како -i .

-R име на датотека

--just-symbols = filename

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

За компатибилност со други ELF линкери, ако опцијата -R е проследена со име на директориум, наместо името на датотеката, се третира како опција -rpath .

- Стрип-сите

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

-S

--поддршка за дебагирање

Донеси ги информациите за симболот на дебагерот (но не и сите симболи) од излезната датотека.

- трага

Печатете ги имињата на влезните датотеки како што ги обработува LD.

скрипта

--script = сценариска датотека

Користете scriptfile како линк скрипта. Овој скрипт го заменува стандардниот линкер на ld (наместо да додава на него), па командната датотека мора да специфицира се што е потребно за да се опише излезната датотека. Ако scriptfile не постои во тековниот директориум, "ld" го бара во директориумите специфицирани со било кои претходни опции -L . Опции со повеќе- Т се акумулираат.

симбол

--одредено = симбол

Симбол на сила да се внесе во излезната датотека како недефиниран симбол. Ова, на пример, може да предизвика поврзување на дополнителни модули од стандардни библиотеки. -u може да се повтори со различни аргументи на опција за внесување дополнителни недефинирани симболи. Оваа опција е еквивалентна на командата "EXTERN" на линк скрипта.

-Ur

За ништо друго освен програмите C + +, оваа опција е еквивалентна на -r : генерира пренослив излез --- т.е. излезната датотека која пак може да служи како влез за ld . Кога ги поврзува програмите на C ++, -Ur ги решава референците кон конструктори, за разлика од -r . Не работи за користење -Ur на датотеки кои самите беа поврзани со -Ur ; откако ќе биде изградена табелата на конструкторот, не може да се додаде. Користете -Ur само за последната делумна врска, и -r за другите.

- единствен [= СЕКЦИЈА ]

Креира одделен излез секција за секој влез одделот за појавување на ДЕЛ , или ако недостасува арбитража SECTION аргумент недостасува, за секој дел за влез во сирачиња. Дел од сирачиња не е посебно споменат во линк скрипта. Оваа опција може да ја користите повеќекратно на командната линија; Тоа го спречува нормалното спојување на делот за внесување со исто име, надредени доделувања на секција за излез во линк-скрипта.

-v

--верзија

-V

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

-x

- резиме-сите

Избришете ги сите локални симболи.

-X

- локални жители

Избришете ги сите привремени локални симболи. За повеќето цели, ова се сите локални симболи чии имиња започнуваат со L.

симбол

- трамвај-симбол = симбол

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

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

- Патот

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

клучен збор

Признатите клучни зборови се "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" и "nocopyreloc ". Другите клучни зборови се игнорираат за Соларис компатибилноста. "initfirst" го означува објектот што треба првично да се иницијализира при извршување пред други објекти. "interpose" го означува објектот што неговата табела со симболи интервенира пред сите симболи, но главната извршна датотека. "loadfltr" го означува предметот што неговите filtees ќе бидат обработени веднаш за време на извршување. "nodefaultlib" го означува објектот што ќе го игнорира пребарувањето на зависности од овој објект сите стандардни патеки за пребарување на библиотеката. "nodelete" означува дека објектот не треба да се растовара за време на извршувањето. "nodlopen" го означува објектот што не е достапен за "dlopen". "nodump" означува дека објектот не може да биде фрлен од "dldump". "сега" го означува објектот со не-мрзливи траење обврзувачки. "потекло" означува објектот може да содржи $ ORIGIN. "defs" ги оневозможува недефинираните симболи. "muldefs" дозволува повеќе дефиниции. "combreloc" ги комбинира повеќеслојните секции и ги сортира за да направи динамичен кеширање за пребарување.

"nocombreloc" ги оневозможува комбинираните делови со повеќе релокации. "nocopyreloc" оневозможува производство на копии.

- ( архиви -)

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

Архивите треба да бидат листа на архивни датотеки . Тие можат да бидат експлицитни имиња на датотеки или -l опции.

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

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

- прифатливост-непознато-влез-лак

- не-прифати-непознат-влез-лак

Го прикажува линкерот да прифати влезни датотеки чија архитектура не може да се препознае. Претпоставката е дека корисникот знае што прави и намерно сака да ги поврзе овие непознати влезни датотеки. Ова беше стандардното однесување на линкер, пред отпуштањето 2.14. Стандардното однесување од објавувањето 2.14 па натаму е да се отфрлат таквите влезни датотеки, па така е додадена опцијата --accept-unknown-input-arch за да се врати старото однесување.

-соодветна клучен збор

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

-Бинамиски

-Да

-call_shared

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

-Бгрупа

Поставете го знакот "DF_1_GROUP" во записот "DT_FLAGS_1" во динамичкиот дел. Ова предизвикува поврзувачот за извршување да се справи со lookups во овој објект и неговите зависности да се извршуваат само внатре во групата. - не-дефиниран е имплициран. Оваа опција е значајна само на платформите ELF кои поддржуваат споделени библиотеки .

-Бостатик

-Дн

-non_shared

-статично

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

-Бимболичен

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

- проверете секции

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

Бара линкер да не ги проверува адресите на делот откако ќе бидат назначени за да видат дали има преклопувања. Нормално врската ќе ја изврши оваа проверка, и ако најде било какви преклопувања, таа ќе произведе соодветни пораки за грешки. Поврзувачот не знае, и прави додатоци за делови во преклопувања. Стандардното однесување може да се обнови со користење на прекинувачи на командната линија - check-sections .

- cref

Излез за вкрстена референтна табела. Ако се генерира датотека со мапи на линк, референтната табела е отпечатена во датотеката со мапи. Во спротивно, се печати на стандардниот излез.

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

- не-дефинирај-заеднички

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

Опцијата -not-define-common овозможува раздвојување на одлуката за доделување адреси на Common symbols од изборот на излезниот тип на датотека; инаку не-Relocatable тип на излез ги присилува адресите на Common symbols. Користењето -no-define-common овозможува заеднички симболи кои се референцирани од споделена библиотека за да бидат доделени адреси само во главната програма. Ова го елиминира неискористениот дуплиран простор во споделената библиотека, а исто така ја спречува можната конфузија околу решавањето на погрешниот дупликат кога има многу динамички модули со специјализирани патеки за пребарување за резолуција на траење на траење.

--defsym симбол = израз

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

--demangle [= стил ]

- не-демонг

Овие опции контролираат дали да ги демантираат имињата на симболите во пораките за грешки и друг излез. Кога на линкерот им е кажано да се разделува, се обидува да ги претстави имињата на симболите на читлив начин: ги протрира водечките знаци за подвлекување, ако тие се користат од формат на датотека со објект, и ги претвора C + + измамен имињата на симболите во кориснички читливи имиња. Различни компајлери имаат различни стилови на превртување. Опционалниот аргумент за демонглинг стил може да се користи за да се избере соодветен стил на демонглинг за вашиот компајлер. Линкер ќе се демантира стандардно, освен ако не е поставена променливата за околина COLLECT_NO_DEMANGLE . Овие опции може да се користат за замена на стандардните.

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

Поставете го името на динамичкиот линкер. Ова е само значајно кога генерира динамички поврзани ELF извршни програми. Стандардниот динамички линкер е нормално точен; не користете го ова освен ако знаете што правите.

- меморирани релации

Оваа опција е значајна кога поврзува МИПС вграден PIC код, генериран од опцијата -membedded-pic на компајлерот и асемблерот на ГНУ. Тоа предизвикува линкер да создаде табела која може да се користи за време на извршувањето за да се преселат сите податоци кои беа статички иницијализирани на вредностите на покажувачот. Погледнете го кодот во тестовите / ld-empic за детали.

- фатални предупредувања

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

- сила-exe-суфикс

Осигурајте се дека излезната датотека има. EXE суфикс.

Ако успешно изградената целосно поврзана излезна датотека нема ".exe" или " .dll " суфикс, оваа опција го принудува врската да ја копира излезната датотека на едно исто име со наставка ".exe". Оваа опција е корисна кога користите немодифицирани makers на Unix на Microsoft Windows домаќин, бидејќи некои верзии на Windows нема да ја стартуваат сликата, освен ако не завршува со ".exe" суфиксот.

- не-ГЦ-секции

--gc-делови

Овозможете собирање на неискористени влезни делови. Се игнорира на цели кои не ја поддржуваат оваа опција. Оваа опција не е компатибилна со -r , ниту пак треба да се користи со динамичко поврзување. Стандардното однесување (за неисполнување на оваа собирање на ѓубрето ) може да се врати со наведување на -no-gc-секции во командната линија.

- помош

Печати резиме на опциите на командната линија на стандардниот излез и излез.

- Целна помош

Печатете резиме на сите целни специфични опции за стандардниот излез и излез.

-Мапа mapfile

Печатете мапа на линкови до датотечната мапа. Погледнете го описот на опцијата , погоре.

- не-чувај-меморија

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

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

-z defs

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

--малку повеќе дефиниција

-z muldefs

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

--allow-shlib-недефинирано

Овозможи недефинирани симболи во споделени објекти дури и кога е поставено -no-undefined. Нето резултатот ќе биде дека недефинираните симболи во редовните објекти сеуште ќе предизвикаат грешка, но недефинираните симболи во споделени објекти ќе бидат игнорирани. Имплементацијата на no_undefined ја прави претпоставката дека врската на врската ќе се задави на недефинирани симболи. Меѓутоа, постои барем еден систем (BeOS) каде што недефинираните симболи во споделени библиотеки се нормални бидејќи кернелот ги заокружува во време на оптоварување за да одбере која функција е најсоодветна за тековната архитектура. IE динамички избираат соодветна memset функција. Очигледно, исто така е нормално за HPPA споделени библиотеки да имаат недефинирани симболи.

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

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

- не предупредување-несогласување

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

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

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

--небитни-exec

Задржете ја извршна излезна датотека секогаш кога е сеуште употреблива. Вообичаено, врската нема да произведе излезна датотека ако се соочува со грешки за време на процесот на врската; излегува без да пишува излезна датотека кога ќе издаде каква било грешка.

-nostdlib

Само пребарување директориуми на библиотеки експлицитно наведени во командната линија. Библиотечните директориуми наведени во линковите скрипти (вклучувајќи ги и линкерските скрипти наведени во командната линија) се игнорираат.

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

ld може да биде конфигуриран да поддржува повеќе од еден вид објект датотека. Ако вашиот ld е конфигуриран на овој начин, можете да ја користите опцијата --oformat за да го наведете бинарниот формат за датотеката на излезниот објект. Дури и кога ld е конфигуриран да поддржува алтернативни формати на објекти, обично не треба да го специфицирате ова, бидејќи ld треба да биде конфигуриран да произведува како стандарден излез формат највообичаен формат на секоја машина. излезниот формат е текстуална низа, името на одреден формат поддржан од BFD библиотеките. (Можете да ги наведете достапните бинарни формати со objdump -i .) Командата за сценариото "OUTPUT_FORMAT" исто така може да го специфицира излезниот формат, но оваа опција го пребришува.

-qmagic

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

-Qy

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

- релакс

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

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

На некои платформи овие врски време глобалните оптимизации може да направи симболичко дебагирање на добиената извршна датотека невозможна. Ова е познато како случај за семејството на процесори Matsushita MN10200 и MN10300.

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

--retain-symbols-file filename

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

--retain-symbols-file не отфрла недефинирани симболи или симболи потребни за преместување.

Можете само да наведете --retain-symbols-file еднаш во командната линија. Тоа ги надминува -s и -S .

-Прпат реж

Додај директориум до библиотеката за траење на библиотеката за траење. Ова се користи при поврзување на ELFexecutable со споделени објекти. Сите аргументи на -rpath се конкатенирани и предадени на линк за траење, кој ги користи за лоцирање споделени предмети за време на извршувањето. Опцијата -rpath исто така се користи кога се лоцираат споделени предмети кои се потребни за споделени предмети експлицитно вклучени во линкот; видете го описот на опцијата -rpath-link . Ако -rpath не се користи при поврзување на ELF извршна, содржината на променливата на околина "LD_RUN_PATH" ќе се користи ако е дефинирана.

Опцијата -rpath исто така може да се користи на SunOS. Стандардно, на SunOS, поврзувачот ќе формира папка за пребарување за траење од сите -L опции што им се дадени. Ако се користи опција -rpath , патеката за пребарување траење ќе се формира исклучиво со помош на -rpath опциите, игнорирајќи ги опциите -L . Ова може да биде корисно кога користите gcc, со што се додаваат многу опции -L кои можат да бидат на NFS монтирани датотечни системи.

За компатибилност со други ELF линкери, ако опцијата -R е проследена со име на директориум, наместо името на датотеката, се третира како опција -rpath .

-rpath-link DIR

Кога користите ELF или SunOS, една споделена библиотека може да бара друго. Ова се случува кога врската "ld -shared" вклучува споделена библиотека како една од влезните датотеки.

Кога поврзувачот се соочува со таква зависност кога прави не-споделена, не-преместувачка врска, таа автоматски ќе се обиде да ја лоцира потребната споделена библиотека и да ја вклучи во линкот, ако не е експлицитно вклучена. Во таков случај, опцијата -rpath-link го одредува првиот сет на директориуми за пребарување. Опцијата -rpath-link може да специфицира низа имиња на директориуми или со наведување на листа со имиња одделени со дебели букви , или повеќепати се појавува.

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

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

1.

Сите директориуми специфицирани со опции -rpath-link .

2.

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

3.

Во системот ELF, ако не се користат опциите -rpath и "rpath-link", пребарајте ја содржината на променливата на околина "LD_RUN_PATH". Тоа е само за мајчин линкер.

4.

На SunOS, ако не се користи опцијата -rpath , пребарајте ги сите директориуми специфицирани со опции -L .

5.

За мајчин линкер, содржината на променливата на околина "LD_LIBRARY_PATH".

6.

За мајчин ELF линк, директориумите во "DT_RUNPATH" или "DT_RPATH" на споделена библиотека се пребаруваат за споделени библиотеки што се потребни од неа. Внесувањата "DT_RPATH" се игнорираат ако "DT_RUNPATH" записи постојат.

7.

Стандардните директориуми, нормално / lib и / usr / lib .

8.

За мајчин линкер на системот ELF, ако датотеката /etc/ld.so.conf постои, листата на директориуми пронајдени во таа датотека.

Доколку не е пронајдена потребната споделена библиотека, линкер ќе издаде предупредување и ќе продолжи со врската.

-елик

-Бразибилен

Направете споделена библиотека. Ова во моментов е поддржано само на ELF, XCOFF и SunOS платформи. На SunOS, линкер автоматски ќе креира споделена библиотека ако опцијата -e не се користи и во неа нема неопределени симболи.

- заеднички

Оваа опција им кажува на ld да ги сортира заедничките симболи по големина кога ги става во соодветните излезни секции. Прво дојдете сите еден бајт симболи, потоа сите два бајта, а потоа сите четири бајти, а потоа сè друго. Ова е за да се спречат празнините помеѓу симболите поради ограничувањата за усогласување.

--split-by-file [ size ]

Слично на --split-by-reloc, но создава нов излез секција за секоја влезна датотека кога големина е достигнат. големина е стандардна големина од 1, ако не е дадена.

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

Се обидува да создаде дополнителни секции во излезната датотека, така што ниедна поединечна излезна секција во датотеката не содржи повеќе од пребројување на броевите . Ова е корисно кога генерираме огромни преместувачки датотеки за преземање во одредени кернели во реално време со формат на датотека со објект во COFF; бидејќи COFFcannot претставуваат повеќе од 65535 преместувања во еден дел. Забележете дека ова не успее да работи со форматите на објектните датотеки кои не поддржуваат произволни делови. Поврзувачот нема да ги подели индивидуалните влезни секции за редистрибуција, па ако еден дел за внесување содржи повеќе од пребројувања на броеви, еден излезен дел ќе содржи многу преместувања. брои стандардни вредности на вредност од 32768.

- статии

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

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

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

На пример, на SunOS, ld ги комбинира дупликатните записи во табелата со низа на симболи. Ова може да ја намали големината на излезната датотека со целосни информации за дебагирање за повеќе од 30 проценти. За жал, програмата SunOS "dbx" не може да ја прочита добиената програма ("gdb" нема проблеми). Прекинувачот -традиционален формат кажува дека ld не ги комбинира дупликатите записи.

- секција-почеток sectionname = org

Лоцирајте дел во излезната датотека на апсолутна адреса дадена од org . Оваа опција може да ја искористите онолку пати колку што е потребно за да пронајдете повеќе секции во командната линија. org мора да биде еден хексадецимален број; за компатибилност со други линкери, може да ја испуштите водечката 0x која обично е поврзана со хексадецимални вредности. Забелешка: не треба да има бел простор меѓу името на секцијата , знакот за еднаквост (`` = '') и org .

-Tbss org

-Тада org

-Ttext org

Користете org како почетна адреса за --- односно --- "bss", "data", или "text" сегмент на излезната датотека. org мора да биде еден хексадецимален број; за компатибилност со други линкери, може да ја испуштите водечката 0x која обично е поврзана со хексадецимални вредности.

- Добро

- доверба

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

--version-script = version-scriptfile

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

- предупредување-заеднички

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

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

int i = 1;

Дефиниција, која оди во делот за иницијализирани податоци на излезната датотека.

extern int i;

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

int i;

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

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

1.

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

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

2.

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

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

3.

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

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

4.

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

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

5.

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

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

- предупредувачки-конструктори

Предупреди ако се користат глобални конструктори. Ова е корисно само за неколку формати на датотеки со објекти. За формати како COFF или ELF, врската не може да ја открие употребата на глобални конструктори.

- предупредување-повеќе-gp

Предупреди ако во излезната датотека се потребни повеќе глобални вредности на покажувачот. Ова е само значајно за одредени процесори, како што е Алфа. Поточно, некои процесори ставаат големи вредносни константи во посебен дел. Посебен регистер (глобалниот покажувач) укажува на средината на овој дел, така што константите можат ефикасно да се вчитаат преку режимот за релативно адресирање на основниот регистер. Бидејќи офсет во релативниот режим на база-регистар е фиксен и релативно мал (на пример, 16 бита), ова ја ограничува максималната големина на константен базен. Така, во големи програми, често е неопходно да се користат повеќе глобални вредности на покажувачот за да може да се адресираат сите можни константи. Оваа опција предизвикува предупредување да се издаде секогаш кога овој случај се појавува.

- предупредување-еднаш

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

- прилагодување на пораки

Предупредувајте ако адресата на излезниот дел е променета поради усогласувањето. Вообичаено, усогласувањето ќе биде подесено со дел за внесување. Адресата ќе се промени само ако не е експлицитно наведена; односно, ако командата "SECTIONS" не ја одредува почетната адреса за делот.

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

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

Две белешки кога ја користите оваа опција од gcc: Прво, gcc не знае за оваа опција, па мора да го користите -Wl, -во-архив . Второ, не заборавајте да користите -WL, -не-цела-архива по вашата листа на архиви, бидејќи gcc ќе додаде своја сопствена архива на вашата врска и можеби нема да сакате ова знаме да влијае и на тие.

--викнат симбол

Користете ја омотот функција за симбол . Секоја недефинирана референца за симболот ќе биде решен до "__ wrap_symbol". Секоја недефинирана референца за "__real_symbol" ќе биде решена да симболизира .

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

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

празнина * __wrap_malloc (int c) {printf ("malloc повика со% ld \ n", c); врати __real_malloc (c); }

Ако го поврзете другиот код со оваа датотека користејќи --wrap malloc , тогаш сите повици до "malloc" ќе ја повикаат функцијата "__wrap_malloc" наместо. Повикот кон "__real_malloc" во "__wrap_malloc" ќе ја нарече вистинската "прилагодлива" функција.

Можеби сакате да ја дадете функцијата "__real_malloc", така што врските без опцијата --wrap ќе успеат. Ако го направите ова, не треба да ја ставите дефиницијата за "__ real_malloc" во истата датотека како "__wrap_malloc"; ако го направите, асемблерот може да го реши повикот пред поврзувачот да има шанса да го префрли на "malloc".

- можност за нови-dtags

- не-нови-dtags

Овој линкер може да креира нови динамички ознаки во ELF. Но, постарите системи на ELF можеби не ги разбираат. Ако наведете --enable-new-dtags , динамичките ознаки ќе бидат креирани по потреба. Ако наведете --disable-new-dtags , нема да се креираат нови динамички ознаки. Стандардно, новите динамички ознаки не се креирани. Забележете дека тие опции се достапни само за ELF-системите.

Линкот i386 PE ја поддржува опцијата -shared , што предизвикува излез да биде динамички поврзана библиотека (DLL) наместо нормална извршна датотека. Треба да го именувате излезот "* .dll" кога ја користите оваа опција. Покрај тоа, линкер целосно ги поддржува стандардните "* .def" датотеки, кои може да се наведат на линковата командна линија како објектна датотека (всушност, треба да им претходи на архивите што ги извезува симболите од, за да осигураат дека тие се поврзани, како нормална датотека со објект).

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

--add-stdcall-alias

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

- датотека со бази на податоци

Користете ја датотеката како име на датотека за да ги зачувате основните адреси на сите преместувања потребни за генерирање на DLL- датотеки со dlltool .

- dll

Креирајте DLL наместо редовно извршување. Можете исто така да го користите -илификувате или наведете "ЛИБРАР" во дадена ".def" датотека.

--состојба-stdcall-fixup

--disable-stdcall-fixup

Ако врската пронајде симбол што не може да го реши, ќе се обиде да направи `` нејасно поврзување '' со барање на друг дефиниран симбол кој се разликува само во формат на името на симболот (cdecl vs stdcall) и ќе го реши тој симбол со поврзување на натпреварот. На пример, недефинираниот симбол "_foo" може да биде поврзан со функцијата "_foo @ 12", или недефинираниот симбол "_bar @ 16" може да биде поврзан со функцијата "_bar". Кога врската го прави ова, таа печати предупредување, бидејќи вообичаено треба да не успеа да се поврзе, но понекогаш да ги увезуваат библиотеките генерирани од DLL од трети страни можеби ќе треба оваа функција да биде употреблива. Ако наведете -enable-stdcall-fixup , оваа функција е целосно овозможена и предупредувањата не се испечатени. Ако наведете --disable-stdcall-fixup , оваа опција е оневозможена и таквите несогласувања се сметаат за грешки.

- извоз-сите-симболи

Ако се даде, сите глобални симболи во објектите што се користат за изградба на DLL ќе бидат извезени од DLL. Забележете дека ова е стандардно ако инаку нема да има извезени симболи. Кога симболите експлицитно се извезуваат преку DEF-датотеки или имплицитно се извезуваат преку атрибути на функција, стандардното е да не извезува ништо друго, освен ако оваа опција не е дадена. Забележете дека симболите "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" и "impure_ptr" нема да бидат автоматски извезени. Исто така, симболите увезени од други DLLs нема да бидат повторно извезени, ниту пак ќе симболираат специфицирање на внатрешниот распоред на DLL, како оние што почнуваат со "_head_" или завршуваат со "_iname". Покрај тоа, нема да бидат извезени симболи од "libgcc", "libstd ++", "libmingw32" или "crtX.o". Симболи чии имиња започнуваат со "__rtti_" или "__builtin_" нема да бидат извезени, за да им помогнете со C ++ DLL-датотеки. Конечно, постои широк список на cygwin-приватни симболи кои не се извезуваат (очигледно, ова важи и кога се градат DLL-датотеки за целите на cygwin).

Овие cygwin-исклучоци се: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3" "и" око ".

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

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

--exclude-libs lib , lib , ...

Одредува листа на архиви за архиви од кои симболите не треба автоматски да се извезуваат. Имињата на библиотеките може да се разграничат со запирки или колони. Одредувањето на "-exclude-libs ALL" ги исклучува симболите во сите библиотеки во архивите од автоматскиот извоз. Симболите експлицитно наведени во .def датотеката сеуште се извезуваат, без оглед на оваа опција.

- датотека-усогласување

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

- резервна резерва

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

Наведете ја количината на меморија за резервирање (и евентуално извршување) што ќе се користи како куп за оваа програма. Стандардно е задржано 1Mb, извршено е 4K.

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

Користете ја вредноста како базна адреса на вашата програма или DLL. Ова е најниската мемориска локација што ќе се користи кога ќе се вчита вашата програма или DLL. За да се намали потребата за преместување и подобрување на перформансите на вашите DLLs, секој треба да има единствена база на адреса и да не се преклопува со други DLLs. Стандардно е 0x400000 за извршни и 0x10000000 за DLLs.

- килер

Ако е дадено, стандардните наставки (@ nn ) ќе бидат одземени од симболите пред да бидат извезени.

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

Го поставува главниот број на "верзија на сликата". Стандардно на 1.

--мајор-ос-верзија верзија

Го поставува главниот број на `` os верзија ''. Стандардно на 4.

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

Го поставува главниот број на `` потсистемска верзија``. Стандардно на 4.

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

Го поставува малиот број на "верзија на сликата". Стандардно на 0.

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

Го поставува малиот број на `` os верзија ''. Стандардно на 0.

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

Го поставува малиот број на `` потсистемска верзија``. Стандардно на 0.

--излез-дефиниција

Линкерот ќе ја создаде датотеката со датотека која ќе содржи DEF-датотека што одговара на DLL-от кој линкер генерира. Оваа DEF-датотека (која треба да се нарече "* .def") може да се користи за креирање на библиотека за увоз со "dlltool" или може да се користи како референца за автоматски или имплицитно извезени симболи.

- out-implib датотека

Линкер ќе ја креира датотеката со датотеки која ќе содржи увоз lib што одговара на DLL линкер генерира. Овој увоз lib (кој треба да се нарекува "* .dll.a" или "* .a" може да се користи за поврзување на клиентите против генерираниот DLL; ова однесување овозможува да се прескокне посебен чекор за креирање на библиотеки за "dlltool".

- можност за авто-слика-база

Автоматски изберете ја сликата за DLL, освен ако не е одредено со користење на аргументот "-image-base". Со користење на хаш генериран од dllname за да создаде уникатни бази на слики за секој DLL, во меморијата судири и преместувања кои може да го одложи извршувањето на програмата се избегнуваат.

--disable-auto-image-base

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

низа на префикс --dll-search-prefix

Кога динамично поврзувам со DLL без библиотека за увоз, побарајте " .dll" во предност на "lib .dll". Ова однесување овозможува лесно разграничување помеѓу DLL-и изградени за разни `` под-платформи '': мајчин, cygwin, uwin, pw, итн. На пример, cygwin-от DLL обично користат "-dll-search-prefix = cyg".

- можност за автоматско внесување

Дали софистицираното поврзување на "_симбол" на "__imp__symbol" за увозот на податоци од DLL-и, создавајќи ги неопходните симболи за засилување при градење на библиотеките за увоз со оние DATAexports. Ова обично ќе "само работи" --- но понекогаш може да ја видите оваа порака:

"променливата" "не може да биде автоматско увезена. Ве молиме прочитајте ја документацијата за" --enable-auto-import "за детали."

Оваа порака се јавува кога некои (под) изразот пристапува кон адресата што е конечна дадена со збирот на две константи (табелите за увоз на Win32 дозволуваат само еден). Случаите каде што ова може да се случи вклучуваат пристап до полињата на членовите на структурните променливи увезени од DLL, како и користење на постојан индекс во низа променлива увезена од DLL. Секоја променлива за повеќе зборови (низи, структури, долги долги итн.) Може да ја активира оваа состојба на грешка. Сепак, без оглед на точниот тип на податоци на променливата извезена променлива, ld секогаш ќе ја детектира, издаде предупредување и ќе излезе.

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

Еден начин е да се користи - switch-run-pseudo-reloc switch. Ова ја остава задачата за прилагодување на референциите во вашиот клиентски код за временската околина, така што овој метод функционира само кога опцијата за извршување ја поддржува оваа функција.

Второто решение е да се принуди една од "константите" да биде променлива --- која е, непознат и не-оптимизиран во времето на компајлирање. За низи, постојат две можности: а) направете индекс (адреса на низата) променлива, или б) да го направите индексот "постојан" променлива. Така:

extern type extern_array []; extern_array [1] -> {испарливи тип * t = extern_array; t [1]}

или

extern type extern_array []; extern_array [1] -> {испарливи int t = 1; extern_array [t]}

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

extern struct s extern_struct; extern_struct.field -> {испарливи struct s * t = & extern_struct; t-> поле}

или

extern long long extern_ll; extern_ll -> {испарливи долго долго * local_ll = & extern_ll; * local_ll}

Третиот метод за справување со оваа тешкотија е да се откаже од "автоматскиот увоз" за навредливиот симбол и да го обележи со "__declspec (dllimport)". Меѓутоа, во практиката што бара користење на #defines за компајлирање за да се покаже дали градите DLL, гради код на клиент кој ќе се поврзе со DLL, или само градење / поврзување со статичка библиотека. При изборот помеѓу различните методи за решавање на проблемот со "директна адреса со постојан офсет", треба да размислите за типично користење на реалниот свет:

Оригинал:

--foo.h extern int arr []; --foo.c # вклучи "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Решение 1:

--foo.h extern int arr []; --foo.c # вклучи "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) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c # вклучи "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Четвртиот начин да се избегне овој проблем е повторно да ја кодирате вашата библиотека да користи функционален интерфејс, а не интерфејс за податоци за навредливи променливи (на пр. Set_foo () и get_foo () функции за пристап).

--дадеен-авто-увоз

Не обидувајте се да направите софистицирано поврзување на "_symbol" со "__imp__symbol" за DATAimports од DLLs.

- време на извршување-псевдо-релоци

Ако вашиот код содржи изрази што се опишани во делот --enable-auto-import, односно DATAimports од DLL со не-нулти неутрализирање, овој прекинувач ќе создаде вектор на 'траење псевдолокации' што може да се користи од страна на траење на животната средина за да се прилагоди референци до такви податоци во кодот на клиентот.

- не-траење-псевдо-релоци

Не создавајте псевдо преместувања за увоз на податоци од DLL-от што не се нулти. Ова е стандардно.

- можност за екстра-pe-debug

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

- сечење-усогласување

Го поставува порамнувањето на делот. Секциите во меморијата секогаш ќе почнат на адреси кои се повеќекратни од овој број. Стандардно на 0x1000.

- резервна резерва

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

Наведете ја количината на меморија за резервирање (и евентуално извршување) што ќе се користи како оџак за оваа програма. Стандардно е задржано 2Mb, извршено е 4K.

- систем кој

- систем кој : главен

- систем кој : главен . малолетник

Го одредува потсистемот под кој вашата програма ќе се изврши. Правните вредности за кои се "мајчин", "прозорци", "конзола" и "посикс". Исто така можете да ја поставите верзијата на потсистемот исто така.

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