Skip to main content

Totul despre comanda Linux / Unix: ld

Linux Tutorial for Beginners: Introduction to Linux Operating System (Iunie 2026)

Linux Tutorial for Beginners: Introduction to Linux Operating System (Iunie 2026)
Anonim

NUME

ld - Folosind LD, link-ul GNU

REZUMAT

ld Opțiuni objfile …

DESCRIERE

ld combină un număr de fișiere de obiecte și arhive, le mută datele și leagă referințele simbolurilor. De obicei, ultimul pas în compilarea unui program este de a rulald.

ld acceptă fișierele lingvistice ale Comandamentului Linker scrise într-o suprasetare a sintaxei limbajului de comandă al editorului de legături al AT & T, pentru a oferi un control explicit și total asupra procesului de conectare.

Această pagină de om nu descrie limba de comandă; a se vedeald introduceți în "info" sau manualul ld: link-ul GNU, pentru detalii complete despre limba de comandă și despre alte aspecte ale linkerului GNU.

Această versiune deld utilizează bibliotecile BFD cu scop general pentru a funcționa pe fișierele obiect. Asta permiteld pentru a citi, a combina și a scrie fișiere obiect în multe formate diferite --- de exemplu, COFF sau "a.out". Diferite formate pot fi legate împreună pentru a produce orice tip de fișier obiect disponibil.

În afară de flexibilitatea sa, link-ul GNU este mai util decât alte linkere în furnizarea de informații de diagnosticare. Mulți linkeri abandonează executarea imediat după întâmpinarea unei erori; ori de câte ori este posibil,ld continuă executarea, permițându-vă să identificați alte erori (sau, în unele cazuri, să obțineți un fișier de ieșire în ciuda erorii).

Legătura GNUld este menit să acopere o gamă largă de situații și să fie cât mai compatibil cu ceilalți linkeri. Ca rezultat, aveți multe opțiuni pentru a-și controla comportamentul.

OPȚIUNI

Linkerul suportă o multitudine de opțiuni de linie de comandă, dar în practică, puțini dintre aceștia sunt utilizați într-un anumit context. De exemplu, o utilizare frecventă ald este de a conecta fișierele obiect standard Unix pe un sistem standard Unix acceptat. Pe un astfel de sistem, pentru a conecta un fișier "hello.o":

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

Acest lucru spuneld pentru a produce un fișier numit producție ca urmare a conectării fișierului "/lib/crt0.o" cu "hello.o" și a librăriei "libc.a", care va proveni din directoarele de căutare standard. (Vezi discuția despre-l opțiunea de mai jos.)

Unele dintre opțiunile de linie de comandă pentruld pot fi specificate în orice punct al liniei de comandă. Cu toate acestea, opțiunile care se referă la fișiere, cum ar fi-l sau-T, determină citirea fișierului în punctul în care opțiunea apare în linia de comandă, în raport cu fișierele de obiecte și alte opțiuni de fișier. Repetarea opțiunilor non-fișier cu un argument diferit nu va avea niciun efect suplimentar sau nu va suprascrie evenimentele precedente (cele din partea stângă din linia de comandă) a acelei opțiuni. Opțiunile care pot fi specificate în mod semnificativ de mai multe ori sunt menționate în descrierile de mai jos.

Argumentele non-opțiune sunt fișiere obiect sau arhive care trebuie să fie legate între ele. Acestea pot urma, precede sau pot fi amestecate cu opțiuni de linie de comandă, cu excepția faptului că un argument de fișier obiect nu poate fi plasat între o opțiune și argumentul acesteia.

De obicei, link-ul este invocat cu cel puțin un fișier obiect, dar puteți specifica alte forme de fișiere de intrare binare utilizând-l, -R, și limba de comandă a scriptului. Dacă Nu fișierele de intrare binare sunt specificate, linkerul nu produce nicio ieșire și emite mesajulNu există fișiere de intrare.

Dacă linkerul nu poate recunoaște formatul unui fișier obiect, acesta va presupune că este un script de legătură. Un script specificat în acest mod mărește scriptul principal de linker utilizat pentru link (fie scriptul implicit de linker, fie cel specificat prin utilizarea-T). Această caracteristică permite linkerului să facă legătura cu un fișier care pare să fie un obiect sau o arhivă, dar de fapt definește doar câteva valori ale simbolurilor sau utilizează "INPUT" sau "GROUP" pentru a încărca alte obiecte. Rețineți că specificarea unui script în acest fel doar mărește scriptul principal de linker; folosește-T opțiunea de a înlocui în întregime scriptul de link implicit.

Pentru opțiunile ale căror nume sunt o singură literă, opțiunile argumentele trebuie fie să urmeze litera opțiunii fără spațiu alb, fie să fie date ca argumente separate imediat după opțiunea care le cere.

Pentru opțiunile ale căror nume sunt mai multe litere, o bordură sau două pot precede numele opțiunii; de exemplu,-trace-simbol și--trace-simbol sunt echivalente. Notă - există o excepție de la această regulă. Opțiunile pentru mai multe litere care încep cu un litere mici "o" pot fi precedate numai de două liniuțe. Acest lucru este de a reduce confuzia cuo- opțiune. Deci, de exemplu-omagic setează numele fișierului de ieșire lamagie întrucât--omagic setează pavilionul NMAGIC pe ieșire.

Argumentele pentru opțiunile cu mai multe litere trebuie fie să fie separate de numele opțiunii printr-un semn egal, fie să fie date ca argumente separate imediat după opțiunea care le cere. De exemplu,- simbolul "trace" pentru foo și--trace-simbol = foo sunt echivalente. Sunt acceptate abrevieri unice ale numelor opțiunilor cu mai multe litere.

Notă - dacă linkerul este invocat indirect, printr-un driver compilator (de exCGC), atunci toate opțiunile liniei de comandă linker ar trebui să fie prefixate de-Wl, (sau orice este potrivit pentru un anumit driver compilator), după cum urmează:

gcc -Wl, - grupul de start foo.o bar.o -Wl, - endgroup

Acest lucru este important, pentru că în caz contrar, programul de compilatoare poate să scadă în tăcere opțiunile de linker, ducând la o legătură necorespunzătoare.

Iată o tabelă a comutatoarelor liniei de comandă generice acceptate de link-ul GNU:

-A cuvinte cheie

Această opțiune este acceptată pentru compatibilitatea HP / UX. cuvinte cheie argumentul trebuie să fie unul dintre șirurileArhiva, impartit, sauMod implicit. -aarchive este echivalent funcțional cu-Bstatic, iar celelalte două cuvinte cheie sunt echivalente funcțional cu-Bdynamic. Această opțiune poate fi utilizată de mai multe ori.

-A arhitectură

--architecture = arhitectură

În versiunea actuală ald, această opțiune este utilă numai pentru familia de arhitecturi Intel 960. In aceeald configurare, arhitectură argumentul identifică arhitectura specifică din familia 960, permițând anumite măsuri de siguranță și modificând calea de căutare a arhivelor.

Versiuni viitoare aleld pot sprijini funcționalități similare pentru alte familii de arhitecturi.

-b formatul de intrare

--format = formatul de intrare

ld poate fi configurat pentru a suporta mai multe tipuri de fișiere obiect. Dacă ale taleld este configurat în acest fel, puteți utiliza-b opțiunea de a specifica formatul binar pentru fișierele de intrare care urmează această opțiune pe linia de comandă. Chiar și cândld este configurat să suporte formate de obiecte alternative, de obicei, nu trebuie să specificați acest lucru, cald ar trebui să fie configurat să aștepte ca format de intrare implicit cel mai obișnuit format pe fiecare mașină. formatul de intrare este un șir de text, numele unui anumit format acceptat de bibliotecile BFD. (Puteți lista formatele binare disponibile cuobjdump -i.)

Poate doriți să utilizați această opțiune dacă vă conectați fișiere cu un format binar neobișnuit. Puteți utiliza, de asemenea-b pentru a schimba în mod explicit formatele (când se leagă fișiere obiect de diferite formate), prin includerea-b formatul de intrare înainte de fiecare grup de fișiere obiect într-un anumit format.

Formatul implicit este preluat din variabila de mediu "GNUTARGET".

De asemenea, puteți defini formatul de intrare dintr-un script folosind comanda "TARGET";

-c RMN-commandfile

--mri-script = RMN-commandfile

Pentru compatibilitatea cu linkerele produse de IRM,ld acceptă fișiere de script scrise într-un limbaj de comandă alternativ, limitat, descris în secțiunea Fișiere Script Compatibil Script din documentația GNU ld. Introduceți fișiere script MRI cu opțiunea-c; folosește-T opțiunea de a rula scripturile linker scrise în scop generalld scripting language. Dacă RMN-cmdfile nu exista,ldîl caută în directoarele specificate de orice-L Opțiuni.

-d

-DC

-DP

Aceste trei opțiuni sunt echivalente; formularele multiple sunt acceptate pentru compatibilitatea cu alte linkere. Ele atribuie spațiu simbolurilor comune chiar dacă este specificat un fișier de ieșire relocabil (cu-r). Comanda scriptului "FORCE_COMMON_ALLOCATION" are același efect.

-e intrare

--entry = intrare

Utilizare intrare ca simbol explicit pentru începerea executării programului dvs., mai degrabă decât punctul de intrare implicit. Dacă nu este denumit un simbol intrare , linkerul va încerca să analizeze intrare ca număr, și să o utilizați ca adresă de intrare (numărul va fi interpretat în baza 10; puteți utiliza un element de conducere0x pentru baza 16 sau pentru un conducător0 pentru baza 8).

-E

--export-dinamică

Când creați un executabil legat dinamic, adăugați toate simbolurile în tabela simbolurilor dinamice. Tabela simbolică dinamică este setul de simboluri care sunt vizibile din obiectele dinamice la momentul executării.

Dacă nu utilizați această opțiune, tabela simbolului dinamic va conține în mod obișnuit numai acele simboluri care sunt menționate de un obiect dinamic menționat în link.

Dacă utilizați "dlopen" pentru a încărca un obiect dinamic care trebuie să se refere la simbolurile definite de program, mai degrabă decât un alt obiect dinamic, probabil că va trebui să utilizați această opțiune atunci când conectați programul în sine.

De asemenea, puteți utiliza scriptul de versiune pentru a controla ce simboluri ar trebui adăugate la tabela simbolurilor dinamice dacă formatul de ieșire îl acceptă. Vedeți descrierea din--version-script în @ ref {VERSION}.

-EB

Link obiecte mari-endian. Acest lucru afectează formatul de ieșire implicit.

-el

Legați obiecte mici-endian. Acest lucru afectează formatul de ieșire implicit.

-f

--auxiliar Nume

Când creați un obiect partajat ELF, setați câmpul DT_AUXILIARY intern la numele specificat. Acest lucru spune linkerului dinamic că tabela simbolică a obiectului partajat ar trebui utilizată ca filtru auxiliar pe tabela simbolică a obiectului partajat Nume .

Dacă mai târziu leagă un program împotriva acestui obiect filtru, atunci când executați programul, link-ul dinamic va vedea câmpul DT_AUXILIARY. Dacă linkerul dinamic rezolvă orice simbol din obiectul de filtrare, acesta va verifica mai întâi dacă există o definiție în obiectul partajat Nume . Dacă există una, va fi utilizată în locul definiției în obiectul de filtrare. Obiectul partajat Nume nu trebuie să existe. Astfel, obiectul partajat Nume poate fi folosit pentru a oferi o implementare alternativă a anumitor funcții, probabil pentru depanare sau performanță specifică mașinii.

Această opțiune poate fi specificată de mai multe ori. Înregistrările DT_AUXILIARY vor fi create în ordinea în care apar pe linia de comandă.

-F Nume

--filtru Nume

Când creați un obiect distribuit ELF, setați câmpul DT_FILTER intern la numele specificat. Aceasta indică linkerului dinamic că tabela simbolică a obiectului partajat care este creat ar trebui să fie folosit ca un filtru în tabela simbolică a obiectului partajat Nume .

Dacă legați mai târziu un program de acest obiect filtru, atunci când executați programul, linkerul dinamic va vedea câmpul DT_FILTER. Link-ul dinamic va rezolva simbolurile conform tabelului de simbol al obiectului filtru ca de obicei, dar va lega efectiv de definițiile găsite în obiectul partajat Nume . Astfel, obiectul filtru poate fi folosit pentru a selecta un subset al simbolurilor furnizate de obiect Nume .

Unii linkeri mai vechi au folosit-F opțiune în cadrul unei linii de instrumente de compilare pentru specificarea formatului de fișier obiect atât pentru fișierele de intrare, cât și pentru cele de ieșire. Legătura GNU folosește alte mecanisme în acest scop:-b, --format, --oformat opțiuni, comanda "TARGET" în scripturile linker și variabila de mediu "GNUTARGET". Legătura GNU va ignora-F atunci când nu creați un obiect partajat ELF.

-fini Nume

Când creați un obiect executabil sau obiect ELF, apelați NAME când obiectul executabil sau partajat este descărcat, prin setarea DT_FINI la adresa funcției. Implicit, linkerul folosește funcția "_fini" ca funcție de apelare.

-g

Ignorat. Oferit pentru compatibilitate cu alte instrumente.

-G valoare

--gpsize = valoare

Setați dimensiunea maximă a obiectelor care urmează a fi optimizate utilizând registrul GP la mărimea . Acest lucru este semnificativ numai pentru formatele de fișiere obiect, cum ar fi MIPS ECOFF, care acceptă introducerea obiectelor mari și mici în secțiuni diferite. Acest lucru este ignorat pentru alte formate de fișiere obiect.

-h Nume

-soname = Nume

Când creați un obiect comun ELF, setați câmpul DT_SONAME intern la numele specificat. Atunci când un executabil este legat cu un obiect partajat care are un câmp DT_SONAME, atunci când se execută executabilul linkerul dinamic va încerca să încarce obiectul partajat specificat de câmpul DT_SONAME, mai degrabă decât folosind numele fișierului dat linkerului.

-i

Efectuați o legătură incrementală (aceeași ca opțiunea-r).

-init Nume

Când creați un obiect executabil sau obiect ELF, apelați NAME la încărcarea obiectului executabil sau partajat, setând DT_INIT la adresa funcției. Implicit, linkerul folosește funcția "_init" ca funcție de apel.

-l Arhiva

--library = Arhiva

Adăugați fișierul de arhivă Arhiva la lista de fișiere de conectat. Această opțiune poate fi utilizată de mai multe ori.ld va căuta calea-listă pentru apariția "libarchive.a" pentru fiecare Arhiva specificate.

Pe sistemele care acceptă bibliotecile partajate,ld poate căuta și biblioteci cu extensii, altele decât ".a". Mai exact, pe sistemele ELF și SunOS,ld va căuta un director pentru o bibliotecă cu o extensie de ".so" înainte de a căuta unul cu extensia ".a". Prin convenție, o extensie ".so" indică o bibliotecă partajată.

Linkerul va căuta o arhivă o singură dată, în locația în care este specificată pe linia de comandă. Dacă arhiva definește un simbol care nu a fost definit într-un obiect care a apărut înaintea arhivei pe linia de comandă, linkerul va include fișierele corespunzătoare din arhivă. Cu toate acestea, un simbol nedefinit dintr-un obiect care apare ulterior pe linia de comandă nu va determina linkerul să caute arhiva din nou.

Consultați-( opțiune pentru o modalitate de a forța linkerul să caute arhive de mai multe ori.

Puteți arăta aceeași arhivă de mai multe ori pe linia de comandă.

Acest tip de căutare arhivă este standard pentru link-urile Unix. Cu toate acestea, dacă utilizațild pe AIX, rețineți că este diferită de comportamentul linkerului AIX.

-L searchdir

--library-path = searchdir

Adaugă calea searchdir la lista de căi careld va căuta biblioteci de arhivă șild scripturi de control. Puteți utiliza această opțiune de mai multe ori. Directoarele sunt căutate în ordinea în care sunt specificate pe linia de comandă. Directoarele specificate pe linia de comandă sunt căutate înaintea directoarelor implicite. Toate-L opțiunile se aplică tuturor-l , indiferent de ordinea în care apar opțiunile.

Dacă searchdir începe cu "=", atunci "=" va fi înlocuit cu prefixul sysroot , o cale specificată atunci când link-ul este configurat.

Setul implicit de căi căutate (fără a fi specificat cu-L) depinde de modul de emulareld utilizează și, în unele cazuri, și modul în care a fost configurat.

Căile pot fi specificate și într-un script de legătură cu comanda "SEARCH_DIR". Directoarele specificate în acest mod sunt căutate în punctul în care apare scriptul de linker în linia de comandă.

-m emulație

Emulați emulație agent de legătură. Puteți lista emulațiile disponibile cu--verbose sau-VOpțiuni.

În cazul în care-m opțiunea nu este utilizată, emulația este preluată din variabila de mediu "LDEMULATION", dacă aceasta este definită.

În caz contrar, emularea implicită depinde de modul în care link-ul a fost configurat.

-M

--print-map

Imprimați o hartă a link-urilor la ieșirea standard. O hartă a legăturilor oferă informații despre link, inclusiv următoarele:

*

În cazul în care fișierele obiect și simbolurile sunt mapate în memorie.

*

Cum sunt alocate simbolurile comune.

*

Toți membrii arhivării au fost incluși în legătură, menționând simbolul care a cauzat aderarea arhivei.

-N

--nmagic

Opriți alinierea paginilor de secțiuni și marcați semnalul de ieșire ca "NMAGIC", dacă este posibil.

-N

--omagic

Setați secțiunile de text și de date pentru a fi citite și scriitoare. De asemenea, nu aliniați segmentul de date în pagină și dezactivați legătura între bibliotecile partajate. Dacă formatul de ieșire acceptă numere magice de stil Unix, marcați ieșirea ca "OMAGIC".

--no-omagic

Această opțiune anulează majoritatea efectelor-N opțiune. Setează secțiunea de text pentru a fi citită numai și forțează segmentul de date să fie aliniat la pagini. Notă - această opțiune nu permite conectarea la biblioteci partajate. Utilizare-Bdynamic pentru asta.

o- producție

--output = producție

Utilizare producție ca nume pentru programul produs deld; dacă această opțiune nu este specificată, numele a.out este utilizat în mod implicit. Comanda scriptului "OUTPUT" poate specifica și numele fișierului de ieșire.

-O nivel

Dacă nivel este o valoare numerică mai mare decât zerold optimizează ieșirea. Acest lucru poate dura mult mai mult și, prin urmare, ar trebui să fie activat numai pentru binarul final.

-q

--emit-relocs

Lăsați secțiunile de relocare și conținutul în exececutables complet legat. Analiza legăturii postale și instrumentele de optimizare ar putea avea nevoie de aceste informații pentru a efectua modificări corecte ale executabililor. Acest lucru are ca rezultat executabile mai mari.

Această opțiune este în prezent acceptată numai pe platformele ELF.

-r

--relocateable

Generează ieșire relocabilă --- adică, generează un fișier de ieșire care, la rândul său, poate servi drept inputld. Acest lucru este adesea numit legătură parțială . Ca efect secundar, în medii care suportă numere standard de magie Unix, această opțiune stabilește de asemenea numărul magic al fișierului de ieșire la "OMAGIC". Dacă această opțiune nu este specificată, se produce un fișier absolut. Când conectați programele C ++, această opțiune nu voi să rezolve referințele la constructori; pentru a face asta, utilizați-Ur.

Când un fișier de intrare nu are același format ca fișierul de ieșire, legarea parțială este acceptată numai dacă acel fișier de intrare nu conține delocalizări. Diferitele formate de ieșire pot avea restricții suplimentare; de exemplu, unele formate bazate pe "a.out" nu acceptă deloc conectarea parțială cu fișierele de intrare în alte formate.

Această opțiune face același lucru ca și-i.

-R nume de fișier

--just simboluri = nume de fișier

Citiți numele simbolurilor și adresele acestora de la nume de fișier , dar nu îl mutați sau îl includeți în ieșire. Aceasta permite ca fișierul dvs. de ieșire să se refere simbolic la locațiile absolute ale memoriei definite în alte programe. Puteți utiliza această opțiune de mai multe ori.

Pentru compatibilitatea cu alte linkere ELF, dacă-R opțiunea este urmată de un nume de director, mai degrabă decât un nume de fișier, este tratată ca-rpath opțiune.

-s

--strip-toate

Omiteți toate informațiile despre simboluri din fișierul de ieșire.

-S

--strip-depanare

Omiteți informațiile din simbolul debugger (dar nu toate simbolurile) din fișierul de ieșire.

-t

--urmă

Imprimați numele fișierelor de intrare cald le procesează.

-T script

--script = script

Utilizare script ca script de legătură. Acest script înlocuieșteldscriptul de link implicit (mai degrabă decât adăugarea la acesta), deci commandfile trebuie să specifice tot ceea ce este necesar pentru a descrie fișierul de ieșire. Dacă script nu există în directorul curent, "ld" îl caută în directoarele specificate de oricare dintre precedentele-L Opțiuni. Multiplu-T opțiunile se acumulează.

-u simbol

--undefined = simbol

Forta simbol pentru a fi introduse în fișierul de ieșire ca un simbol nedefinit. Acest lucru poate, de exemplu, să declanșeze legarea modulelor suplimentare de bibliotecile standard.-u poate fi repetată cu argumente diferite de opțiune pentru a introduce simboluri suplimentare nedefinite. Această opțiune este echivalentă cu comanda "EXTERN" script script.

-Ur

Pentru orice altceva decât programele C ++, această opțiune este echivalentă cu-r: generează ieșire relocabilă --- adică, un fișier de ieșire care poate servi la rândul său ca intrareld. La conectarea programelor C ++,-Ur face rezolva referirile la constructori, spre deosebire-r. Nu funcționează-Ur pe fișierele la care erau legate-Ur; odată ce masa constructorului a fost construită, nu poate fi adăugată la. Utilizare-Ur numai pentru ultima legătură parțială și-r pentru ceilalți.

--unique = SECȚIUNE

Creează o secțiune de ieșire separată pentru fiecare secțiune de intrare potrivită SECȚIUNE , sau în cazul opțiunii wildcard opționale SECȚIUNE argument lipseste, pentru fiecare sectiune de intrare orfana. O secțiune orfană este una care nu este specificată într-un script de legătură. Puteți utiliza această opțiune de mai multe ori pe linia de comandă; Împiedică fuzionarea obișnuită a secțiunilor de intrare cu același nume, asignarea secțiunilor de ieșire într-un script de legătură.

-v

--versiune

-V

Afișați numărul versiunii pentruld.-V opțiunea afișează de asemenea emulațiile acceptate.

-X

--discard-toate

Ștergeți toate simbolurile locale.

-X

--discard-localnici

Ștergeți toate simbolurile locale temporare. Pentru majoritatea țintelor, toate acestea sunt simboluri locale ale căror nume încep cu acesteaL.

-y simbol

--trace-simbol = simbol

Imprimați numele fiecărui fișier conectat în care simbol apare. Această opțiune poate fi furnizată de mai multe ori. În multe sisteme este necesar să se predea o subliniere.

Această opțiune este utilă atunci când aveți un simbol nedefinit în linkul dvs., dar nu știți de unde provine referința.

-Y cale

Adăuga cale la calea implicită de căutare a bibliotecii. Această opțiune există pentru compatibilitatea Solaris.

-z cuvinte cheie

Cuvintele cheie recunoscute sunt "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "nowop", "nocombreloc" “. Celelalte cuvinte cheie sunt ignorate pentru compatibilitatea Solaris. "initfirst" marchează obiectul care urmează să fie inițializat primul la runtime înainte de orice alte obiecte."interpose" marchează obiectul pe care tabela simbolică îl interpune înaintea tuturor simbolurilor, dar executabilul principal. "loadfltr" marchează obiectul că fișierele sale vor fi procesate imediat în timpul execuției "nodefaultlib" marchează obiectul pe care îl va ignora căutarea dependențelor acestui obiect orice căi implicite de căutare a bibliotecii. "nodelete" marchează faptul că obiectul nu trebuie descărcat la rulare. "nodlopen" marchează obiectul care nu este disponibil pentru "dlopen". "nodump" marchează faptul că obiectul nu poate fi eliminat prin "dldump". "acum" marcheaza obiectul cu legarea non-lenes runtime. "originea" marcheaza ca obiectul poate contine $ ORIGIN. "defs" nu permite simbolurile nedefinite. "muldefs" permite mai multe definiții. "combreloc" combină mai multe secțiuni de relocare și le sortează pentru a face posibilă cache-ul de căutare din simboluri dinamice.

"nocombreloc" dezactivează combinarea mai multor secțiuni de relocare. "nocopyreloc" dezactivează producția de copiatoare.

-( arhive -)

--start-grup arhive --end-grup

arhive ar trebui să fie o listă de fișiere de arhivă. Acestea pot fi nume de fișiere explicite sau-lOpțiuni.

Arhivele specificate sunt căutate în mod repetat până când nu sunt create noi referințe nedefinite. În mod normal, o arhivă este căutată o singură dată în ordinea în care este specificată pe linia de comandă. Dacă un simbol din acea arhivă este necesar pentru a rezolva un simbol nedefinit la care se referă un obiect dintr-o arhivă care apare mai târziu pe linia de comandă, linkerul nu ar fi capabil să rezolve această referință. Prin gruparea arhivelor, toate acestea sunt căutate în mod repetat până când toate referințele posibile sunt rezolvate.

Utilizarea acestei opțiuni are un cost semnificativ de performanță. Cel mai bine este să îl utilizați numai atunci când există referințe circulante inevitabile între două sau mai multe arhive.

--accept-necunoscut-intrare-arc

--no-accepta-necunoscut-intrare-arc

Spune linkerului să accepte fișierele de intrare a căror arhitectură nu poate fi recunoscută. Presupunerea este că utilizatorul știe ce fac și intenționează în mod deliberat să lege în aceste fișiere de intrare necunoscute. Acesta a fost comportamentul implicit al linker-ului, înainte de lansarea lui 2.14. Comportamentul implicit din lansarea 2.14 este respingerea unor astfel de fișiere de intrare, și astfel--accept-necunoscut-intrare-arc a fost adăugată opțiunea pentru restaurarea comportamentului vechi.

-afirma cuvinte cheie

Această opțiune este ignorată pentru compatibilitatea SunOS.

-Bdynamic

-dy

-call_shared

Legătura cu bibliotecile dinamice. Acest lucru are sens numai pe platformele pentru care sunt acceptate bibliotecile partajate. Această opțiune este în mod normal implicită pentru astfel de platforme. Diferitele variante ale acestei opțiuni sunt compatibile cu diferite sisteme. Puteți folosi această opțiune de mai multe ori pe linia de comandă: afectează căutarea bibliotecii-l opțiunile care o urmează.

-Bgroup

Setați pavilionul "DF_1_GROUP" din secțiunea "DT_FLAGS_1" din secțiunea dinamică. Acest lucru determină link-ul runtime să se ocupe de căutările în acest obiect și dependențele acestuia să fie efectuate numai în interiorul grupului.--no-nedefinite este implicită. Această opțiune este semnificativă doar pentru platformele ELF care acceptă bibliotecile partajate.

-Bstatic

-dn

-non_shared

-static

Nu faceți legătura cu bibliotecile partajate. Acest lucru are sens numai pe platformele pentru care sunt acceptate bibliotecile partajate. Diferitele variante ale acestei opțiuni sunt compatibile cu diferite sisteme. Puteți folosi această opțiune de mai multe ori pe linia de comandă: afectează căutarea bibliotecii-l opțiunile care o urmează.

-Bsymbolic

Când creați o bibliotecă partajată, legați referințele la simbolurile globale la definiția din biblioteca partajată, dacă există. În mod normal, este posibil ca un program legat de o bibliotecă partajată să suprascrie definiția din biblioteca partajată. Această opțiune este semnificativă numai pentru platformele ELFplatform care acceptă bibliotecile partajate.

--check-sectiuni

secțiuni --no-check

Solicit linker-ul nu pentru a verifica adresele secțiunilor după ce au fost atribuite pentru a vedea dacă există suprapuneri. În mod normal linkerul va efectua această verificare și, dacă găsește orice suprapunere, va produce mesaje de eroare adecvate. Linkerul știe și face diferențe pentru secțiunile din suprapuneri. Comportamentul implicit poate fi restabilit utilizând comutatorul liniei de comandă--check-sectiuni.

--cref

Realizați o tabelă de referință încrucișată. Dacă se generează un fișier hartă linker, tabela de referință este imprimată în fișierul hărții. În caz contrar, este imprimat pe ieșirea standard.

Formatul tabelului este intenționat simplu, astfel încât să poată fi ușor procesat printr-un scenariu, dacă este necesar. Simbolurile sunt tipărite, sortate după nume. Pentru fiecare simbol se afișează o listă cu numele fișierelor. Dacă simbolul este definit, primul fișier listat este locația definiției. Fișierele rămase conțin referințe la simbol.

--no-defini-comune

Această opțiune împiedică atribuirea adreselor simbolurilor comune. Comanda scriptului "INHIBIT_COMMON_ALLOCATION" are același efect.

--no-defini-comune opțiunea permite decuplarea deciziei de atribuire a adreselor simbolurilor comune de la alegerea tipului de fișier de ieșire; în caz contrar, un tip de ieșire care nu poate fi relocat forțează forțarea adreselor simbolurilor comune. Utilizarea--no-defini-comune permite simbolurilor comune care fac referire dintr-o bibliotecă partajată să li se atribuie adrese numai în programul principal. Acest lucru elimină spațiul duplicat neutilizat din biblioteca partajată și previne, de asemenea, orice posibilă confuzie în ceea ce privește rezolvarea duplicatului greșit atunci când există multe module dinamice cu căi de căutare specializate pentru rezolvarea simbolurilor runtime.

--defsym simbol = expresie

Creați un simbol global în fișierul de ieșire, care conține adresa absolută dată de expresie . Puteți utiliza această opțiune de câte ori este necesar pentru a defini mai multe simboluri în linia de comandă. O formă limitată de aritmetică este susținută pentru expresie în acest context: puteți să dați o constantă hexazecimală sau numele unui simbol existent sau să utilizați "+" și "-" pentru a adăuga sau a scădea constantele sau simbolurile hexazecimale. Dacă aveți nevoie de expresii mai elaborate, luați în considerare utilizarea limbajului de comandă a linker-ului dintr-un script. Notă: nu ar trebui să existe un spațiu alb între simbol , semnul egal (``=''), și expresie .

--demangle = stil

--no-demangle

Aceste opțiuni controlează dacă trebuie să eliminați denumirile simbolurilor din mesajele de eroare și din alte ieșiri. Atunci când li se spune că linkerul este demontat, acesta încearcă să prezinte nume de simboluri într-un mod lizibil: scade sublinierile de conducere dacă sunt folosite de formatul de fișier obiect și convertesc numele de simboluri C ++ în nume care pot fi citite de utilizator. Diferitele compilatoare au diferite stiluri de mangling. Argumentul de stil de demutare opțional poate fi folosit pentru a alege un stil de demagnetizare adecvat pentru compilatorul dvs. Linkerul va fi demontat implicit, cu excepția variabilei de mediuCOLLECT_NO_DEMANGLE este setat. Aceste opțiuni pot fi utilizate pentru a înlocui setările implicite.

--dynamic-linker fişier

Setați numele linkerului dinamic. Acest lucru are sens numai atunci când se generează executabile ELF dinamic conectate. Link-ul dinamic implicit este în mod normal corect; nu folosiți acest lucru decât dacă știți ce faceți.

--embedded-relocs

Această opțiune are sens numai atunci când se face legătura între codul PIC încorporat MIPS, generat de opțiunea -membedded-pic la compilarea GNU și asamblor. Aceasta determină linkerul să creeze o tabelă care poate fi folosită la timpul de execuție pentru a muta orice date care au fost inițializate static la valorile indicatoarelor. Vedeți codul din testsuite / ld-empic pentru detalii.

--fatal-avertismente

Tratează toate avertismentele drept erori.

--force-exe-sufix

Asigurați-vă că un fișier de ieșire are un sufix .exe.

Dacă un fișier de ieșire complet conectat cu succes nu are un sufix ".exe" sau ".dll", această opțiune obligă linkerul să copieze fișierul de ieșire la unul cu același nume cu un sufix ".exe". Această opțiune este utilă atunci când se utilizează fișierele de configurare unmodified Unix pe o gazdă Microsoft Windows, deoarece unele versiuni de Windows nu vor rula o imagine decât dacă se termină cu un sufix ".exe".

--no-gc secțiuni

--gc-sectiuni

Activați colectarea gunoiului de secțiuni de intrare neutilizate. Se ignoră obiectivele care nu acceptă această opțiune. Această opțiune nu este compatibilă cu-r, nici nu ar trebui să fie utilizat cu legături dinamice. Comportamentul implicit (de a nu efectua această colecție de gunoi) poate fi restabilit prin specificarea--no-gc secțiuni pe linia de comandă.

--Ajutor

Imprimați un sumar al opțiunilor din linia de comandă pe ieșirea standard și pe ieșire.

--target-ajutor

Imprimați un sumar al tuturor opțiunilor specifice țintă pe ieșirea standard și pe ieșire.

-Hartă fișierul de mapare

Imprimați o hartă a link-urilor către fișier fișierul de mapare . Consultați descrierea-M opțiune, de mai sus.

--no-keep-memorie

ld optimizează în mod normal viteza de utilizare a memoriei prin memorarea tabelelor de simboluri ale fișierelor de intrare din memorie. Această opțiune spuneld pentru optimizarea pentru utilizarea memoriei, prin re-redactarea tabelelor cu simboluri după cum este necesar. Acest lucru poate fi necesar dacăld se scurge spațiul de memorie în timp ce se leagă un executabil mare.

--no-nedefinite

-z defs

În mod normal, la crearea unei biblioteci partajate non-simbolice, simbolurile nedefinite sunt permise și lăsate pentru a fi rezolvate de încărcătorul runtime. Aceste opțiuni nu permit astfel de simboluri nedefinite.

--allow-multiple-definition

- Muldefs

În mod normal, atunci când un simbol este definit de mai multe ori, linkerul va raporta o eroare fatală. Aceste opțiuni permit definiții multiple și va fi utilizată prima definiție.

--allow-shlib-nedefinite

Permiteți simbolurile nedefinite în obiecte partajate, chiar dacă este setat --no-undefined. Rezultatul net va fi acela că simbolurile nedefinite în obiectele obișnuite vor declanșa încă o eroare, dar simbolurile nedefinite în obiectele partajate vor fi ignorate. Punerea în aplicare a no_undefined face presupunerea că link-ul runtime se va umfla pe simboluri nedefinite. Cu toate acestea, există cel puțin un sistem (BeOS) unde simbolurile nedefinite în bibliotecile partajate sunt normale, deoarece nucleul le păstrează la momentul încărcării pentru a selecta funcția cea mai potrivită pentru arhitectura curentă. I.E. selectați dinamic o funcție memset corespunzătoare. Se pare că este, de asemenea, normal ca bibliotecile partajate HPPA să aibă simboluri nedefinite.

--no-undefined-versiune

În mod normal, atunci când un simbol are o versiune nedefinită, linkerul îl va ignora. Această opțiune nu permite simbolurile cu versiune nedefinită și va fi emisă o eroare fatală.

--no-avertiza-asimetrie

În mod normalld va da o eroare dacă încercați să conectați împreună fișierele de intrare care sunt necorespunzătoare dintr-un anumit motiv, probabil pentru că au fost compilate pentru diferite procesoare sau pentru diferite endiannesses. Această opțiune spuneld că ar trebui să permită în mod tacit astfel de posibile erori. Această opțiune ar trebui utilizată numai cu grijă, în cazurile în care ați făcut anumite acțiuni speciale care să garanteze că erorile de linker nu sunt adecvate.

--no-ansamblu-arhivă

Opriți efectul--whole-arhiva pentru următoarele fișiere de arhivă.

--noinhibit-exec

Păstrați fișierul de ieșire executabil ori de câte ori este încă utilizabil.În mod normal, linkerul nu va produce un fișier de ieșire dacă întâmpină erori în timpul procesului de conectare; acesta iese fără scrierea unui fișier de ieșire atunci când emite orice eroare.

-nostdlib

Doar directoare de bibliotecă de căutare specificate explicit pe linia de comandă. Bibliotecile specificate în script-urile de link-uri (inclusiv script-urile de link-uri specificate pe linia de comandă) sunt ignorate.

--oformat format de iesire

ld poate fi configurat pentru a suporta mai multe tipuri de fișiere obiect. Dacă ale taleld este configurat în acest fel, puteți utiliza--oformat opțiunea de a specifica formatul binar pentru fișierul obiect de ieșire. Chiar și cândld este configurat să suporte formate de obiecte alternative, de obicei, nu trebuie să specificați acest lucru, cald ar trebui să fie configurat să producă ca format de ieșire implicit formatul cel mai obișnuit pe fiecare mașină. format de iesire este un șir de text, numele unui anumit format acceptat de bibliotecile BFD. (Puteți lista formatele binare disponibile cuobjdump -i.) Comanda scriptului "OUTPUT_FORMAT" poate specifica și formatul de ieșire, dar această opțiune o suprascrie.

-qmagic

Această opțiune este ignorată pentru compatibilitatea cu Linux.

-Qy

Această opțiune este ignorată pentru compatibilitatea SVR4.

--relaxa

O opțiune cu efecte dependente de mașină. Această opțiune este acceptată numai pentru câteva obiective.

Pe unele platforme,--relaxa opțiunea efectuează optimizări globale care devin posibile atunci când linkerul rezolvă adresarea în program, cum ar fi relaxarea modurilor de adresă și sintetizarea de noi instrucțiuni în fișierul obiect de ieșire.

Pe unele platforme, aceste optimizări globale ale timpului de legătură pot face imposibilă depanarea simbolică a executabilului rezultat. Acest lucru este cunoscut pentru cazul familiei de procesoare Matsushita MN10200 și MN10300.

Pe platforme unde acest lucru nu este acceptat,--relaxa este acceptată, dar ignorată.

--retain-simboluri fișier nume de fișier

Reține numai simbolurile afișate în fișier nume de fișier , aruncând toate celelalte. nume de fișier este pur și simplu un fișier plat, cu un singur nume de simbol pe linie. Această opțiune este utilă în special în medii (cum ar fi VxWorks) unde se acumulează treptat o masă globală de simboluri globale, pentru a conserva memoria de rulare.

--retain-simboluri fișier face nu aruncați simbolurile nedefinite sau simbolurile necesare pentru relocări.

Puteți specifica numai--retain-simboluri fișier o dată în linia de comandă. Se suprapune-s și-S.

-rpath dir

Adăugați un director în calea de căutare a bibliotecii runtime. Acest lucru este folosit atunci când un ELFexecutable cu obiecte partajate. Toate-rpath argumentele sunt concatenate și transmise link-ului de execuție, care le utilizează pentru a localiza obiecte partajate în timpul rulării.-rpath opțiunea este, de asemenea, utilizată atunci când găsiți obiecte partajate care sunt necesare de obiecte partajate incluse explicit în link; a se vedea descrierea-rpath-link opțiune. Dacă-rpath nu se utilizează la legarea unui executabil ELF, conținutul variabilei de mediu "LD_RUN_PATH" va fi utilizat dacă este definit.

-rpath poate fi folosit și pe SunOS. În mod implicit, pe SunOS, linkerul va forma un patch de căutare pentru runtime din toate-L opțiunile pe care le oferă. În cazul în care un-rpath este utilizată, calea de căutare runtime va fi formată exclusiv folosind-rpath opțiuni, ignorând opțiunea-LOpțiuni. Acest lucru poate fi util atunci când utilizați gcc, care adaugă multe-L care pot fi sisteme de fișiere montate pe NFS.

Pentru compatibilitatea cu alte linkere ELF, dacă-R opțiunea este urmată de un nume de director, mai degrabă decât un nume de fișier, este tratată ca-rpath opțiune.

-rpath-link DIR

Când utilizați ELF sau SunOS, o bibliotecă partajată poate necesita o altă bibliotecă. Acest lucru se întâmplă atunci când o legătură "ld-shared" include o bibliotecă partajată ca unul dintre fișierele de intrare.

Atunci când linkerul întâlnește o astfel de dependență atunci când face o legătură ne-comună, care nu poate fi mutată, va încerca automat să localizeze biblioteca partajată necesară și să o includă în legătură, dacă nu este inclusă în mod explicit. Într - un astfel de caz,-rpath-link opțiunea specifică primul set de directoare pentru căutare.-rpath-link opțiunea poate specifica o secvență de nume de directoare fie prin specificarea unei liste de nume separate prin colonii, fie prin apariția de mai multe ori.

Această opțiune ar trebui utilizată cu prudență, deoarece suprascrie calea de căutare care poate fi compilată într-o bibliotecă partajată. Într-un astfel de caz, este posibil să se folosească neintenționat o cale de căutare diferită decât link-ul runtime-ului.

Linkerul folosește următoarele căi de căutare pentru a găsi bibliotecile partajate necesare.

1.

Orice directoare specificate de-rpath-link Opțiuni.

2.

Orice directoare specificate de-rpath Opțiuni. Diferența dintre-rpath și-rpath-link este că directoarele specificate de-rpath opțiunile sunt incluse în executabil și utilizate în timpul rulării, în timp ce-rpath-link opțiunea este eficientă numai la momentul conectării. Este doar pentru linkerul nativ.

3.

Pe un sistem ELF, dacă-rpath și nu au fost utilizate opțiunile "rpath-link", căutați conținutul variabilei de mediu "LD_RUN_PATH". Este doar pentru linkerul nativ.

4.

Pe SunOS, dacă-rpath opțiunea nu a fost utilizată, căutați orice directoare specificate folosind-L Opțiuni.

5.

Pentru un linker nativ, conținutul variabilei de mediu "LD_LIBRARY_PATH".

6.

Pentru un linker ELF nativ, directoarele din "DT_RUNPATH" sau "DT_RPATH" ale unei biblioteci partajate sunt căutate pentru bibliotecile partajate necesare.Înregistrările "DT_RPATH" sunt ignorate dacă există intrări "DT_RUNPATH".

7.

Directoarele implicite, în mod normal / lib și / Usr / lib .

8.

Pentru un linker nativ pe un sistem ELF, în cazul în care fișierul /etc/ld.so.conf există lista de directoare găsite în acel fișier.

Dacă biblioteca partajată necesară nu este găsită, linkerul va emite un avertisment și va continua cu linkul.

-impartit

-Bshareable

Creați o bibliotecă partajată. Acest lucru este în prezent acceptat numai pe platformele ELF, XCOFF și SunOS. Pe SunOS, linkerul va crea automat o bibliotecă partajată dacă-e opțiunea nu este utilizată și există simboluri nedefinite în legătură.

--sort-comună

Această opțiune spuneld pentru a sorta simbolurile comune după mărime atunci când le plasează în secțiunile de ieșire corespunzătoare. Mai întâi veniți toate simbolurile de un octet, apoi cele două octeți, apoi cele patru octeți și apoi orice altceva. Aceasta este pentru a preveni decalajele dintre simboluri datorită constrângerilor de aliniere.

--split-by-file mărimea

Similar cu--split-by-Relocare dar creează o nouă secțiune de ieșire pentru fiecare fișier de intrare când mărimea este atins. mărimea implicit la o mărime de 1 dacă nu este dat.

--split-by-reloc numara

Se testează pentru a crea secțiuni suplimentare în fișierul de ieșire, astfel încât nici o singură secțiune de ieșire din fișier să nu conțină mai mult de numara relocări. Acest lucru este util atunci când se generează fișiere uriașe care pot fi mutate pentru a fi descărcate în anumite kernel-uri în timp real cu formatul de fișier obiect COFF; deoarece COFF nu poate reprezenta mai mult de 65535 relocări într-o singură secțiune. Rețineți că aceasta nu va funcționa cu formate de fișiere obiect care nu acceptă secțiuni arbitrare. Linkerul nu va împărți secțiunile individuale de intrare pentru redistribuire, deci dacă o singură secțiune de intrare conține mai mult de numara relocări o singură secțiune de ieșire va conține că multe relocări. numara implicit la o valoare de 32768.

--stats

Calculați și afișați statistici despre funcționarea linkerului, cum ar fi timpul de execuție și utilizarea memoriei.

--traditional format

Pentru unele ținte, producția deld este diferit în anumite privințe de ieșirea unui linker existent. Acest comutator cereld pentru a utiliza în schimb formatul tradițional.

De exemplu, pe SunOS,ld combină intrările duplicate în tabela de simboluri de simboluri. Acest lucru poate reduce dimensiunea unui fișier de ieșire cu informații complete de depanare cu peste 30%. Din păcate, programul SunOS "dbx" nu poate citi programul rezultat ("gdb" nu are probleme).--traditional format comutatorul spuneld pentru a nu combina intrările duplicate.

--section start- numesectiune = org

Găsiți o secțiune în fișierul de ieșire la adresa absolută dată de org . Puteți utiliza această opțiune de câte ori este necesar pentru a localiza mai multe secțiuni în linia de comandă. org trebuie să fie un număr întreg hexazecimal; pentru compatibilitatea cu alte linkere, puteți omite conducerea0x asociate de obicei cu valori hexazecimale. Notă: nu ar trebui să existe un spațiu alb între numesectiune , semnul egal (``=''), și org .

-Tbss org

-Tdata org

-Ttext org

Utilizare org ca adresă de start pentru --- respectiv --- "bss", "data", sau segmentul "text" al fișierului de ieșire. org trebuie să fie un număr întreg hexazecimal; pentru compatibilitatea cu alte linkere, puteți omite conducerea0x asociate de obicei cu valori hexazecimale.

--dll-verbose

--verbose

Afișați numărul versiunii pentruld și listați emulările linkerului acceptate. Afișați fișierele de intrare care pot fi deschise și nu pot fi deschise. Afișați scriptul de linker folosit de linker.

--version-script = Versiune-script

Specificați numele unui script de versiune la linker. Acest lucru este folosit în mod obișnuit atunci când creați biblioteci partajate pentru a specifica informații suplimentare despre heirarhia versiunii pentru biblioteca creată. Această opțiune este semnificativă doar pentru platformele ELF care acceptă bibliotecile partajate.

--warn-comună

Avertizați când un simbol comun este combinat cu un alt simbol comun sau cu o definiție a simbolului. Link-urile Unix permit această practică oarecum neclară, dar link-urile pe alte sisteme de operare nu. Această opțiune vă permite să găsiți probleme potențiale din combinarea simbolurilor globale. Din păcate, unele biblioteci C utilizează această practică, astfel încât este posibil să primiți câteva avertismente despre simboluri atât în ​​biblioteci, cât și în programele dvs.

Există trei tipuri de simboluri globale, ilustrate aici prin exemplele C:

int i = 1;

O definiție, care merge în secțiunea de date inițializată a fișierului de ieșire.

extern int i;

O referință nedefinită, care nu alocă spațiu. Trebuie să existe fie o definiție, fie un simbol comun pentru variabila undeva.

int i;

Un simbol comun. Dacă există doar una sau mai multe simboluri comune pentru o variabilă, aceasta se află în zona de date neinitializată a fișierului de ieșire. Linkerul îmbină mai multe simboluri comune pentru aceeași variabilă într-un singur simbol. Dacă au dimensiuni diferite, alege cea mai mare dimensiune. Linkerul transformă un simbol comun într-o declarație, dacă există o definiție a aceleiași variabile.

--warn-comună opțiunea poate produce cinci tipuri de avertismente. Fiecare avertizare constă dintr-o pereche de linii: prima descrie simbolul întâlnit și cel de-al doilea descrie simbolul anterior întâlnit cu același nume. Unul sau ambele simboluri vor fi un simbol comun.

1.

Transformarea unui simbol comun într-o referință, deoarece există deja o definiție a simbolului.

(

): avertisment: common of `"depășită prin definiție (
): avertisment: definit aici

2.

Transformarea unui simbol comun într-o referință, deoarece se întâlnește o definiție ulterioară a simbolului. Acesta este același lucru cu cel precedent, cu excepția faptului că simbolurile sunt întâlnite într-o ordine diferită.

(

): avertisment: definirea lui `"imperativ comun (
): avertisment: este comun aici

3.

Îmbinarea unui simbol comun cu un simbol comun de același tip.

(

): avertisment: multiple comune de `' (
): avertisment: comună anterioară este aici

4.

Îmbinarea unui simbol comun cu un simbol comun mai mare anterior.

(

): avertisment: common of `"suprascris de o comunitate mai mare (
): avertisment: este mai mare aici

5.

Îmbinarea unui simbol comun cu un simbol comun anterior mai mic. Acesta este același lucru cu cel precedent, cu excepția faptului că simbolurile sunt întâlnite într-o ordine diferită.

(

): avertisment: common of `"supradimensionate mai mici comune (
): avertisment: mai mică este aici

--warn constructori

Avertizați dacă sunt utilizați constructori globali. Acest lucru este util doar pentru câteva formate de fișier obiect. Pentru formate precum COFF sau ELF, linkerul nu poate detecta utilizarea constructorilor globali.

--warn-multiple-gp

Avertizați dacă sunt necesare mai multe valori ale indicatorului global în fișierul de ieșire. Acest lucru este semnificativ doar pentru anumiți procesatori, cum ar fi Alpha. În mod specific, unii procesori plasează constante cu valoare mare într-o secțiune specială. Un registru special (indicatorul global) indică în mijlocul acestei secțiuni, astfel încât constantele să poată fi încărcate eficient printr-un mod de adresare relativă de bază. Deoarece decalajul în modul relativă de bază este fix și relativ mic (de exemplu, 16 biți), aceasta limitează dimensiunea maximă a grupului constante. Astfel, în programele mari, este adesea necesar să se utilizeze mai multe valori globale ale indicelui pentru a putea aborda toate constantele posibile. Această opțiune face ca un avertisment să fie emis ori de câte ori apare acest caz.

--warn-o dată

Avertizați o singură dată pentru fiecare simbol nedefinit, mai degrabă decât o dată pe modul care se referă la acesta.

--warn-sectiune-align

Avertizați dacă adresa unei secțiuni de ieșire este modificată din cauza alinierii. În mod obișnuit, alinierea va fi setată de o secțiune de intrare. Adresa va fi modificată numai dacă nu este specificată explicit; adică dacă comanda "SECTIONS" nu specifică o adresă de pornire pentru secțiune.

--whole-arhiva

Pentru fiecare arhivă menționată pe linia de comandă după--whole-arhiva , includeți fiecare fișier obiect din arhiva în link, în loc să căutați arhiva pentru fișierele obiect obiect. Acest lucru este folosit în mod normal pentru a transforma un fișier de arhivă într-o bibliotecă partajată, forțând fiecare obiect să fie inclus în biblioteca partajată rezultată. Această opțiune poate fi utilizată de mai multe ori.

Două note când se utilizează această opțiune din gcc: Mai întâi, gcc nu știe despre această opțiune, deci trebuie să o utilizați-Wl, -whole-arhiva. În al doilea rând, nu uitați să utilizați-Wl, -no-întregi arhivadupă lista de arhive, deoarece gcc va adăuga o proprie listă de arhive la linkul dvs. și este posibil să nu doriți ca acest steag să afecteze și acele arhive.

--wrap simbol

Utilizați o funcție de împachetare pentru simbol . Orice referință nedefinită la simbol va fi rezolvată la "__ wrap_symbol". Orice referință nedefinită la "__real_symbol" va fi rezolvată simbol .

Aceasta poate fi utilizată pentru a furniza un pachet pentru o funcție de sistem. Funcția de înfășurare ar trebui să fie numită "__wrap_symbol". Dacă dorește să apeleze funcția sistemului, ar trebui să sune "__ real_symbol".

Iată un exemplu trivial:

void * __wrap_malloc (int c) {printf ("malloc numit cu% ld n", c); retur __real_malloc (c); }

Dacă conectați un alt cod folosind acest fișier- înfășurați malloc, atunci toate apelurile către "malloc" vor apela funcția "__wrap_malloc". Apelul la "__real_malloc" în "__wrap_malloc" va apela funcția reală "malloc".

S-ar putea să doriți să oferiți și o funcție "__real_malloc", astfel încât linkurile fără--wrap opțiunea va reuși. Dacă faceți acest lucru, nu ar trebui să puneți definiția "__ real_ma