table of contents
- trixie-backports 4.31.0-1~bpo13+1
- testing 4.32.4-1
- unstable 4.32.4-1
| LD(1) | Instrumente pentru dezvoltare(programare) GNU | LD(1) |
NUME¶
ld - editorul de legături GNU
SINOPSIS¶
ld [opțiuni] fișier-obiect ...
DESCRIERE¶
ld combină mai multe fișiere obiect și fișiere de arhivă, realocă datele acestora și leagă referințele simbolice. De obicei, ultimul pas în compilarea unui program este rularea comenzii ld.
ld acceptă fișiere în limbajul de comandă al editorului de legături (Linker Command Language) scrise într-un superset al sintaxei limbajului de comandă al editorului de legături al AT&T, pentru a oferi un control explicit și total asupra procesului de legare.
Această pagină de manual nu descrie limbajul de comandă; consultați intrarea ld din "info" pentru detalii complete privind limbajul de comandă și alte aspecte ale editorului de legături GNU.
Această versiune a ld utilizează bibliotecile BFD de uz general pentru a opera asupra fișierelor obiect. Acest lucru permite programului ld să citească, să combine și să scrie fișiere obiect în numeroase formate diferite — de exemplu, COFF sau "a.out". Diferitele formate pot fi combinate pentru a genera orice tip de fișier obiect disponibil.
Pe lângă flexibilitatea sa, editorul de legături GNU este mai util decât alți editori de legături în ceea ce privește furnizarea de informații de diagnosticare. Mulți editori de legături abandonează execuția imediat ce întâlnesc o eroare; ori de câte ori este posibil, ld continuă execuția, 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).
Editorul de legături GNU ld este conceput pentru a acoperi o gamă largă de situații și pentru a fi cât mai compatibil cu alți editori de legături. Prin urmare, aveți la dispoziție numeroase opțiuni pentru a-i controla comportamentul.
OPȚIUNI¶
Editorul de legături acceptă o mulțime de opțiuni de linie de comandă, dar, în practică, puține dintre ele sunt utilizate într-un anumit context. De exemplu, o utilizare frecventă a comenzii ld este legarea fișierelor obiect standard Unix pe un sistem Unix standard, compatibil. Pe un astfel de sistem, pentru a lega un fișier "hello.o":
ld -o <output> /lib/crt0.o hello.o -lc
Aceasta îi indică lui ld să genereze un fișier numit output ca rezultat al legării fișierului "/lib/crt0.o" cu "hello.o" și cu biblioteca "libc.a", care va proveni din directoarele standard de căutare. – A se vedea discuția privind opțiunea -l de mai jos.
Unele dintre opțiunile de linie de comandă ale comenzii ld pot fi specificate în orice punct al liniei de comandă. Cu toate acestea, opțiunile care se referă la fișiere, precum -l sau -T, determină citirea fișierului în punctul în care apare opțiunea în linia de comandă, în raport cu fișierele obiect și cu alte opțiuni de fișiere. Repetarea opțiunilor care nu se referă la fișiere cu un argument diferit fie nu va avea niciun efect suplimentar, fie va suprascrie aparițiile anterioare (cele situate mai la stânga în linia de comandă) ale 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 fără opțiuni sunt fișiere obiect sau arhive care urmează să fie legate între ele. Acestea pot urma, preceda sau fi intercalate cu opțiunile din linia de comandă, cu excepția faptului că un argument de tip fișier obiect nu poate fi plasat între o opțiune și argumentul acesteia.
De obicei, editorul de legături este apelat cu cel puțin un fișier obiect, dar puteți specifica și alte tipuri de fișiere binare de intrare folosind opțiunile -l, -R și limbajul de comandă al scriptului. Dacă nu se specifică deloc fișiere binare de intrare (no), editorul de legături nu generează nicio ieșire și afișează mesajul No input files.
Dacă editorul de legături nu poate recunoaște formatul unui fișier obiect, va presupune că acesta este un script de legare. Un script specificat în acest mod completează scriptul principal de legare utilizat pentru legare (fie scriptul implicit, fie cel specificat prin utilizarea comenzii -T). Această caracteristică permite editorului să efectueze legarea cu un fișier care pare a fi un fișier obiect sau o arhivă, dar care, de fapt, definește doar câteva valori ale simbolurilor sau utilizează "INPUT" sau "GROUP" pentru a încărca alte obiecte. Specificarea unui script în acest mod doar completează scriptul principal al editorului de legături, cu comenzile suplimentare plasate după scriptul principal; utilizați opțiunea -T pentru a înlocui în întregime scriptul implicit al editorului de legături, dar rețineți efectul comenzii "INSERT".
În cazul opțiunilor ale căror denumiri constau dintr-o singură literă, argumentele opțiunii trebuie fie să urmeze litera opțiunii fără spații între ele, fie să fie specificate ca argumente separate, imediat după opțiunea care le solicită.
În cazul opțiunilor ale căror nume sunt formate din mai multe litere, numele opțiunii poate fi precedat fie de o singură liniuță, fie de două; de exemplu, -trace-symbol și --trace-symbol sunt echivalente. Notă: există o singură excepție de la această regulă. Opțiunile formate din mai multe litere care încep cu litera mică „o” pot fi precedate numai de două liniuțe. Acest lucru are scopul de a reduce confuzia cu opțiunea -o. Astfel, de exemplu, -omagic definește numele fișierului de ieșire ca fiind magic, în timp ce --omagic activează fanionul NMAGIC în ieșire.
Argumentele opțiunilor cu mai multe litere trebuie fie separate de numele opțiunii prin semnul egal, fie prezentate ca argumente separate imediat după opțiunea care le solicită. De exemplu, --trace-symbol foo și --trace-symbol=foo sunt echivalente. Se acceptă abrevieri unice ale numelor opțiunilor cu mai multe litere.
Notă — dacă editorul de legături este invocat indirect, prin intermediul unui controlor de compilator (de exemplu, gcc), atunci toate opțiunile din linia de comandă a editorului de legături trebuie să fie precedate de -Wl, (sau de orice alt prefix corespunzător pentru controlorul de compilator respectiv), după cum urmează:
gcc -Wl,--start-group foo.o bar.o -Wl,--end-group
Acest lucru este important, deoarece, în caz contrar, programul de control al al compilatorului ar putea omite în tăcere opțiunile editorului de legături, ceea ce ar duce la o legare incorectă. De asemenea, pot apărea confuzii atunci când se transmit opțiuni care necesită valori prin intermediul unui controlor, deoarece utilizarea unui spațiu între opțiune și argument acționează ca un separator și determină controlorul să transmită doar opțiunea către editorul de legături și argumentul către compilator. În acest caz, cea mai simplă soluție este utilizarea formelor unite ale opțiunilor cu o singură literă și ale celor cu mai multe litere, cum ar fi:
gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
Iată un tabel al opțiunilor generice din linia de comandă acceptate de editorul de legături GNU:
- @fișier
- Citește opțiunile liniei de comandă din
fișier. Opțiunile citite sunt inserate în
locul opțiunii originale @fișier. Dacă
fișier nu există sau nu poate fi citit, atunci
opțiunea va fi tratată literal și nu va fi
eliminată.
Opțiunile din fișier sunt separate prin spații albe. Un caracter de spațiere poate fi inclus într-o opțiune prin includerea întregii opțiuni între ghilimele simple sau duble. Orice caracter (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care urmează să fie inclus cu o bară oblică inversă. fișier poate conține la rândul său opțiuni @fișier suplimentare; orice astfel de opțiuni vor fi procesate în mod recursiv.
- -a cuvânt-cheie
- Această opțiune este acceptată pentru compatibilitate cu HP/UX. Argumentul cuvânt-cheie trebuie să fie unul dintre șirurile archive, shared sau default. -aarchive este echivalent din punct de vedere funcțional cu -Bstatic, iar celelalte două cuvinte-cheie sunt echivalente din punct de vedere funcțional cu -Bdynamic. Această opțiune poate fi utilizată de câte ori se dorește.
- --audit BIBL_AUDIT
- Adaugă AUDITLIB la intrarea "DT_AUDIT" din secțiunea dinamică. Nu se verifică existența lui AUDITLIB și nici nu va utiliza DT_SONAME specificat în bibliotecă. Dacă este specificat de mai multe ori, "DT_AUDIT" va conține o listă de interfețe de audit care trebuie utilizate, separate prin două puncte. În cazul în care editorul de legături găsește un obiect cu o intrare de audit în timpul căutării bibliotecilor partajate, acesta va adăuga o intrare "DT_DEPAUDIT" corespunzătoare în fișierul de ieșire. Această opțiune este semnificativă numai pe platformele ELF care acceptă interfața rtld-audit.
- -b format-intrare
- --format=format-intrare
- ld poate fi configurat să accepte mai multe tipuri de
fișiere obiect. Dacă ld-ul dvs. este configurat
astfel, puteți folosi opțiunea -b pentru a specifica
formatul binar al fișierelor obiect de intrare care urmează
după această opțiune în linia de
comandă. Chiar și atunci când ld este
configurat să accepte formate de obiecte alternative, de obicei nu
este necesar să specificați acest lucru, deoarece ld
ar trebui să fie configurat astfel încât să
aștepte ca format de intrare implicit cel mai uzual format de pe
fiecare mașină. input-format este un șir de
text, numele unui format specific acceptat de bibliotecile BFD. –
Puteți afișa lista formatelor binare disponibile cu
objdump -i.
Este posibil să doriți să utilizați această opțiune dacă legați fișiere cu un format binar neobișnuit. De asemenea, puteți folosi -b pentru a schimba formatele în mod explicit (atunci când legați fișiere obiect de formate diferite), incluzând -b format-intrare înaintea fiecărui 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, utilizând comanda "TARGET";
- -c fișier-comenzi-MRI
- --mri-script=fișier-comenzi-MRI
- Pentru compatibilitate cu editoarele de legături produse de MRI, ld acceptă fișiere de script scrise într-un limbaj de comandă alternativ și restricționat, descris în secțiunea „Fișiere de script compatibile cu MRI” din documentația GNU ld. Introduceți fișierele de script MRI cu opțiunea -c; utilizați opțiunea -T pentru a rula scripturi de editor de legături scrise în limbajul de scriptare general ld. Dacă MRI-cmdfile nu există, ld îl caută în directoarele specificate de orice opțiuni -L.
- -d
- -dc
- -dp
- Aceste trei opțiuni sunt echivalente; sunt acceptate mai multe forme pentru a asigura compatibilitatea cu alte editoare de legături. Ele alocă spațiu simbolurilor comune chiar și în cazul în care se specifică un fișier de ieșire realocabil (cu -r). Comanda de script "FORCE_COMMON_ALLOCATION" are același efect.
- --depaudit BIBL_AUDIT
- -P BIBL_AUDIT
- Adaugă AUDITLIB la intrarea "DT_DEPAUDIT" din secțiunea dinamică. Nu se verifică existența lui AUDITLIB și nici nu va utiliza DT_SONAME specificat în bibliotecă. Dacă este specificat de mai multe ori, "DT_DEPAUDIT" va conține o listă de interfețe de audit care trebuie utilizate, separate prin două puncte. Această opțiune este semnificativă numai pe platformele ELF care acceptă interfața rtld-audit. Opțiunea „-P” este furnizată pentru compatibilitate cu Solaris.
- --enable-linker-version
- Activează directiva de script de legare
"LINKER_VERSION", descrisă
în Date din secțiunea de ieșire. Dacă
această directivă este utilizată într-un
script de legare și această opțiune a fost
activată, atunci la punctul curent va fi inserat un șir de
caractere care conține versiunea editorului de legături.
Notă – poziția acestei opțiuni în linia de comandă a editorului de legături este importantă. Aceasta va afecta doar scripturile editorului de legături care urmează după ea în linia de comandă sau care sunt integrate în editorul de legături.
- --disable-linker-version
- Dezactivează directiva "LINKER_VERSION" a scriptului editorului de legături, astfel încât să nu introducă un șir de versiuni. Aceasta este valoarea implicită.
- --enable-non-contiguous-regions
- Această opțiune evită generarea unei erori în
cazul în care o secțiune de intrare nu se potrivește
cu o secțiune de ieșire corespunzătoare. Editorul de
legături încearcă să aloce secțiunea de
intrare secțiunilor de ieșire corespunzătoare
succesive și generează o eroare numai dacă nicio
secțiune de ieșire nu este suficient de mare. Acest lucru
este util atunci când sunt disponibile mai multe regiuni de memorie
necontigue, iar secțiunea de intrare nu necesită una anume.
Ordinea în care sunt evaluate secțiunile de intrare nu se
modifică; de exemplu:
MEMORY { MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14 MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40 MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40 } SECTIONS { mem1 : { *(.data.*); } > MEM1 mem2 : { *(.data.*); } > MEM2 mem3 : { *(.data.*); } > MEM3 } with input sections: .data.1: size 8 .data.2: size 0x10 .data.3: size 4 results in .data.1 affected to mem1, and .data.2 and .data.3 affected to mem2, even though .data.3 would fit in mem3.Această opțiune este incompatibilă cu instrucțiunile INSERT, deoarece modifică modul în care secțiunile de intrare sunt corelate cu secțiunile de ieșire.
- --enable-non-contiguous-regions-warnings
- Această opțiune activează afișarea avertismentelor atunci când "--enable-non-contiguous-regions" permite potriviri posibil neașteptate în atribuirea secțiunilor, ceea ce poate duce la eliminarea tacită a unei secțiuni în loc să se genereze o eroare deoarece aceasta nu se încadrează în nicio regiune de ieșire.
- -e intrarea
- --entry=intrarea
- Utilizează intrare ca simbol explicit pentru începerea execuției programului dvs., în locul punctului de intrare implicit. Dacă nu există un simbol numit intrare, editorul de legături va încerca să interpreteze intrare ca un număr și îl va folosi ca adresă de intrare (numărul va fi interpretat în baza 10; puteți folosi un 0x la început pentru baza 16 sau un 0 la început pentru baza 8) . Pentru i386 PE, intrare poate fi, de asemenea, numele original al funcției (fără liniuța de subliniere inițială și/sau fără stdcall @număr la sfârșit, dacă este cazul).
- --exclude-libs biblioteca,biblioteca,...
- Specifică o listă de biblioteci arhivate din care simbolurile nu trebuie exportate automat. Numele bibliotecilor pot fi delimitate prin virgule sau două puncte. Specificarea opțiunii "--exclude-libs ALL" exclude simbolurile din toate bibliotecile arhivate de la exportul automat. Această opțiune este disponibilă numai pentru adaptarea editorului de legături i386 PE și pentru adaptările destinate formatului ELF. Pentru i386 PE, simbolurile enumerate explicit într-un fișier .def sunt totuși exportate, indiferent de această opțiune. Pentru adaptările destinate ELF, simbolurile afectate de această opțiune vor fi tratate ca fiind ascunse.
- --exclude-modules-for-implib modul,modul,...
- Specifică o listă de fișiere obiect sau elemente ale arhivei, din care simbolurile nu trebuie exportate automat, ci trebuie copiate integral în biblioteca de import generată în timpul legării. Numele modulelor pot fi delimitate prin virgule sau două puncte și trebuie să corespundă exact cu numele de fișiere utilizate de ld pentru a deschide fișierele; pentru elementele arhivei, acesta este pur și simplu numele elementului, dar pentru fișierele obiect, numele listat trebuie să includă și să corespundă exact oricărei rute utilizate pentru a specifica fișierul de intrare în linia de comandă a editorului de legături. Această opțiune este disponibilă numai pentru adaptarea pe i386 PE a editorului de legături. Simbolurile enumerate explicit într-un fișier .def sunt totuși exportate, indiferent de această opțiune. [Această opțiune este specifică adaptărilor pentru PE ale editorului de legături]
- -E
- --export-dynamic
- --no-export-dynamic
- Atunci când se creează un executabil legat dinamic,
utilizarea opțiunii -E sau a opțiunii
--export-dynamic determină ca editorul de legături
să adauge toate simbolurile în tabelul de simboluri
dinamice. Tabelul de simboluri dinamice reprezintă ansamblul
simbolurilor vizibile din obiectele dinamice în timpul
rulării.
Dacă nu utilizați niciuna dintre aceste opțiuni (sau utilizați opțiunea --no-export-dynamic pentru a restabili comportamentul implicit), tabelul de simboluri dinamice va conține în mod normal numai acele simboluri care sunt menționate de un obiect dinamic menționat în legătură.
Dacă utilizați "dlopen" pentru a încărca un obiect dinamic care trebuie să facă referire la simbolurile definite de program, și nu la un alt obiect dinamic, atunci probabil că va trebui să utilizați această opțiune atunci când realizați legarea programului însuși.
De asemenea, puteți utiliza lista dinamică pentru a controla simbolurile care trebuie adăugate la tabelul dinamic de simboluri, în cazul în care formatul de ieșire acceptă acest lucru. A se vedea descrierea opțiunii --dynamic-list.
Rețineți că această opțiune este specifică adaptărilor destinate formatului ELF. Adaptările destinate formatului PE acceptă o funcție similară pentru exportarea tuturor simbolurilor dintr-o DLL sau un fișier EXE; consultați descrierea opțiunii --export-all-symbols de mai jos.
- --export-dynamic-symbol=global
- La crearea unui executabil legat dinamic, simbolurile care corespund cu glob vor fi adăugate în tabelul de simboluri dinamice. La crearea unei biblioteci partajate, referințele la simbolurile care corespund cu glob nu vor fi legate de definițiile din biblioteca partajată. Această opțiune nu are niciun efect la crearea unei biblioteci partajate și atunci când nu sunt specificate -Bsymbolic sau --dynamic-list. Această opțiune are sens numai pe platformele ELF care acceptă biblioteci partajate.
- --export-dynamic-symbol-list=fișier
- Specifică un --export-dynamic-symbol pentru fiecare șablon din fișier. Formatul fișierului este identic cu cel al nodului de versiune, fără domeniul de aplicare și numele nodului. Pentru mai multe informații, consultați VERSION.
- -EB
- Leagă obiectele big-endian. Acest lucru afectează formatul de ieșire implicit.
- -EL
- Leagă obiectele little-endian. Acest lucru afectează formatul de ieșire implicit.
- -f nume
- --auxiliary=nume
- În momentul creării unui obiect partajat ELF,
definește câmpul intern DT_AUXILIARY cu numele specificat.
Astfel, se indică editorului de legături dinamice că
tabelul de simboluri al obiectului partajat trebuie utilizat ca filtru
auxiliar pentru tabelul de simboluri al obiectului partajat nume.
Dacă ulterior legați un program la acest obiect filtru, atunci, la rularea programului, editorul de legături dinamice va detecta câmpul DT_AUXILIARY. Dacă editorul de legături dinamice rezolvă vreun simbol din obiectul filtru, acesta va verifica mai întâi dacă există o definiție în obiectul partajat nume. Dacă există una, aceasta va fi utilizată în locul definiției din obiectul filtru. Obiectul partajat nume nu trebuie neapărat să existe. Astfel, obiectul partajat nume poate fi utilizat pentru a oferi o implementare alternativă a anumitor funcții, eventual pentru depanare sau pentru performanță specifică mașinii.
Această opțiune poate fi specificată de mai multe ori. Intrările DT_AUXILIARY vor fi create în ordinea în care apar în linia de comandă.
- -F nume
- --filter=nume
- În momentul creării unui obiect partajat ELF,
definește câmpul intern DT_FILTER cu numele specificat.
Aceasta indică editorului de legături dinamice că
tabelul de simboluri al obiectului partajat care se creează trebuie
utilizat ca filtru pentru tabelul de simboluri al obiectului partajat
nume.
Dacă ulterior legați un program la acest obiect filtru, atunci, atunci când rulați programul, editorul de legături dinamice va detecta câmpul DT_FILTER. Editorul de legături dinamice va rezolva simbolurile conform tabelului de simboluri al obiectului filtru, ca de obicei, dar, de fapt, va realiza legătura cu definițiile găsite în obiectul partajat nume. Astfel, obiectul filtru poate fi utilizat pentru a selecta un subset al simbolurilor furnizate de obiectul nume.
Unele editoare de legături mai vechi foloseau opțiunea -F pe tot parcursul lanțului de compilare pentru a specifica formatul fișierelor obiect, atât pentru fișierele obiect de intrare, cât și pentru cele de ieșire. Editorul GNU folosește alte mecanisme în acest scop: opțiunile -b, --format, --oformat, comanda "TARGET" din scripturile editorului de legături și variabila de mediu "GNUTARGET". Editorul de legături GNU va ignora opțiunea -F atunci când nu creează un obiect partajat ELF.
- -fini=nume
- În momentul creării unui executabil ELF sau a unui obiect partajat, apelează funcția NAME atunci când executabilul sau obiectul partajat este descărcat, configurând DT_FINI la adresa funcției. În mod implicit, editorul de legături utilizează "_fini" ca funcție de apelat.
- -g
- Ignorată. Furnizată pentru compatibilitatea cu alte instrumente.
- -G valoare
- --gpsize=valoare
- Stabilește dimensiunea maximă a obiectelor care urmează să fie optimizate folosind registrul GP pentru dimensiune. Această opțiune are sens doar pentru formatele de fișiere obiect, cum ar fi MIPS ELF, care permit plasarea obiectelor mari și mici în secțiuni diferite. Pentru alte formate de fișiere obiect, această opțiune este ignorată.
- -h nume
- -soname=nume
- În momentul creării unui obiect partajat ELF, definește câmpul intern DT_SONAME cu numele specificat. Atunci când un executabil este legat cu un obiect partajat care conține un câmp DT_SONAME, la rularea executabilului, editorul de legături dinamice va încerca să încarce obiectul partajat specificat de câmpul DT_SONAME, în loc să utilizeze numele de fișier furnizat editorului de legături.
- -i
- Efectuează o legătură incrementală (la fel ca opțiunea -r).
- -init=nume
- În momentul creării unui executabil ELF sau a unui obiect partajat, apelează funcția NAME atunci când executabilul sau obiectul partajat este descărcat, configurând DT_INIT la adresa funcției. În mod implicit, editorul de legături utilizează "_init" ca funcție de apelat.
- -l spațiu-nume
- --library=nume-specificație
- Adaugă fișierul arhivă sau fișierul obiect
specificat de namespec la lista de fișiere care
urmează să fie legate. Această opțiune poate
fi utilizată de un număr nelimitat de ori. Dacă
namespec este de forma :nume-fișier, ld va
căuta în ruta bibliotecii un fișier numit
nume-fișier, în caz contrar va căuta în
ruta bibliotecii un fișier numit libnamespec.a.
Pe sistemele care acceptă biblioteci partajate, ld poate căuta și alte fișiere în afară de libnamespec.a. Mai exact, pe sistemele ELF și SunOS, ld va căuta într-un director o bibliotecă numită libnamespec.so înainte de a o căuta pe cea numită libnamespec.a; (conform convenției, o extensie de tip ".so" indică o bibliotecă partajată). Rețineți că acest comportament nu se aplică în cazul lui nume-fișier, care specifică întotdeauna un fișier numit nume-fișier.
Editorul de legături va căuta într-o arhivă o singură dată, la locația specificată în linia de comandă. Dacă arhiva definește un simbol care nu era definit într-un fișier obiect care apărea înaintea arhivei în linia de comandă, editorul de legături va include fișierul (fișierele) corespunzător(e) din arhivă. Cu toate acestea, un simbol nedefinit într-un fișier obiect care apare mai târziu în linia de comandă nu va determina editorul de legături să caute din nou în arhivă.
Consultați opțiunea -( pentru o modalitate de a forța editorul de legături să caute arhivele de mai multe ori.
Puteți lista aceeași arhivă de mai multe ori în linia de comandă.
Acest tip de căutare în arhivă este standard pentru editorii de legături Unix. Cu toate acestea, dacă utilizați ld pe AIX, rețineți că acesta se comportă diferit față de editorul de legături AIX.
- -L director-căutare
- --library-path=director-căutare
- Adaugă ruta searchdir la lista de rute pe care ld le
va căuta pentru biblioteci de arhivă și scripturi de
control ld. Puteți utiliza această opțiune de
orice număr de ori. Directoarele sunt căutate în
ordinea în care sunt specificate în linia de comandă.
Directoarele specificate în linia de comandă sunt
căutate înaintea directoarelor implicite. Toate
opțiunile -L se aplică tuturor opțiunilor
-l, indiferent de ordinea în care apar opțiunile.
Opțiunile -L nu afectează modul în care
ld caută un script de legătură decât
dacă este specificată opțiunea -T.
Dacă director-căutare începe cu "=" sau $SYSROOT, atunci acest prefix va fi înlocuit cu prefixul sysroot, controlat de opțiunea --sysroot sau specificat la configurarea editorului de legături.
Setul implicit de rute de căutare (atunci când nu este specificat cu -L) depinde de modul de emulare utilizat de ld și, în unele cazuri, și de modul în care a fost configurat.
Rutele pot fi specificate și într-un script de legare folosind comanda "SEARCH_DIR". Directoarele specificate în acest mod sunt căutate în locul în care apare scriptul de legare în linia de comandă.
- -m emularea
- Emulează emulația editorului de legături.
Puteți lista emulările disponibile cu opțiunile
--verbose sau -V.
Dacă opțiunea -m nu este utilizată, emulația este preluată din variabila de mediu "LDEMULATION", dacă aceasta este definită.
În caz contrar, emulația implicită depinde de modul în care a fost configurat editorul de legături.
- --remap-inputs=model=numefișier
- --remap-inputs-file=fișier
- Aceste opțiuni permit modificarea numelor fișierelor de
intrare înainte ca editorul de legături să
încerce să le deschidă. Opțiunea
--remap-inputs=foo.o=bar.o va face ca orice încercare de a
încărca un fișier numit foo.o să
încerce, în schimb, să încarce un
fișier numit bar.o. În primul nume de fișier
sunt permise modele cu caractere generice, astfel încât
--remap-inputs=foo*.o=bar.o va redenumi orice fișier de
intrare care corespunde cu foo*.o în bar.o.
O formă alternativă a opțiunii --remap-inputs-file=nume-fișier permite citirea reasocierilor dintr-un fișier. Fiecare linie din fișier poate conține o singură reasociere. Liniile goale sunt ignorate. Orice lucru de la un caracter hash (#) până la sfârșitul unei linii este considerat un comentariu și este, de asemenea, ignorat. Modelul de asociere poate fi separat de numele fișierului prin spații albe sau printr-un caracter de egalitate (=).
Opțiunile pot fi specificate de mai multe ori. Conținutul acestora se cumulează. Reasocierile vor fi procesate în ordinea în care apar în linia de comandă, iar dacă provin dintr-un fișier, în ordinea în care apar în fișier. Dacă se găsește o potrivire, nu se va mai efectua nicio verificare suplimentară pentru acel nume de fișier.
Dacă numele fișierului de înlocuire este /dev/null sau pur și simplu NUL, atunci reasocierea va determina, de fapt, ignorarea fișierului de intrare. Aceasta poate fi o modalitate convenabilă de a experimenta eliminarea fișierelor de intrare dintr-un mediu de compilare complex.
Rețineți că această opțiune depinde de poziție și afectează doar numele de fișiere care urmează după ea în linia de comandă. Astfel:
ld foo.o --remap-inputs=foo.o=bar.oNu va avea niciun efect, întrucât:
ld --remap-inputs=foo.o=bar.o foo.oVa redenumi fișierul de intrare foo.o în bar.o.
Notă — aceste opțiuni afectează și fișierele la care se face referire prin instrucțiunile INPUT din scripturile de legare. Însă, întrucât scripturile de legare sunt procesate după ce întreaga linie de comandă a fost citită, poziția opțiunilor de recartografiere în linia de comandă nu are importanță.
Dacă opțiunea verbose este activată, vor fi afișate toate corespondențele care se potrivesc; totuși, opțiunea verbose trebuie să fie activată în linia de comandă înainte ca numele fișierelor recartografiate să apară.
Dacă opțiunile -Map sau --print-map sunt activate, lista de reasociere va fi inclusă în rezultatul asocierii.
- -M
- --print-map
- Afișează o hartă a legăturilor la ieșirea standard. O hartă a legăturilor oferă informații despre legătură, inclusiv următoarele:
- În cazul în care fișierele obiect sunt plasate în memorie.
- Modul în care sunt alocate simbolurile comune.
- Toți membrii arhivei sunt incluși în legătură, cu menționarea simbolului care a determinat introducerea membrului arhivei.
- Valorile alocate simbolurilor.
Notă — simbolurile ale căror valori sunt calculate printr-o expresie care implică o referință la o valoare anterioară a aceluiași simbol pot să nu afișeze rezultatul corect în harta de legături. Acest lucru se datorează faptului că editorul de legături elimină rezultatele intermediare și păstrează doar valoarea finală a unei expresii. În astfel de circumstanțe, editorul de legături va afișa valoarea finală între paranteze drepte. Astfel, de exemplu, un script de legare care conține:
foo = 1 foo = foo * 4 foo = foo + 8va produce următorul rezultat în harta de legături dacă se utilizează opțiunea -M:
0x00000001 foo = 0x1 [0x0000000c] foo = (foo * 0x4) [0x0000000c] foo = (foo + 0x8)A se vedea Expresii pentru mai multe informații despre expresiile din scripturile editorului de legături.
- Modul în care sunt fuzionate proprietățile GNU.
Atunci când editorul de legături îmbină secțiunile .note.gnu.property de intrare într-o singură secțiune .note.gnu.property de ieșire, unele proprietăți sunt eliminate sau actualizate. Aceste acțiuni sunt consemnate în harta de legături. De exemplu:
S-a eliminat proprietatea 0xc0000002 pentru a îmbina fișierele foo.o (0x1) și bar.o (nu a fost găsit)Acest lucru indică faptul că proprietatea 0xc0000002 este eliminată din rezultatul final la combinarea proprietăților din foo.o — a cărei valoare a proprietății 0xc0000002 este 0x1 — și bar.o, care nu conține proprietatea 0xc0000002.
S-a actualizat proprietatea 0xc0010001 (0x1) pentru a îmbina fișierele foo.o (0x1) și bar.o (0x1)Acest lucru indică faptul că valoarea proprietății 0xc0010001 este actualizată la 0x1 în rezultatul final atunci când se combină proprietățile din foo.o, a cărui valoare a proprietății 0xc0010001 este 0x1, și bar.o, a cărui valoare a proprietății 0xc0010001 este 0x1.
- Pe unele ținte ELF, o listă de corecții inserate de
--relax
foo.o: Ajustarea ramurii de la adresa 0x00000008 către „far” în secțiunea .textAcest lucru indică faptul că ramificația de la adresa 0x00000008 din fișierul foo.o, care vizează simbolul „far” din secțiunea .text, a fost înlocuită cu o trambulină.
- --print-map-discarded
- --no-print-map-discarded
- Afișează (sau nu afișează) lista secțiunilor eliminate și a celor colectate de motorul de colectare a gunoiului din harta de legături. Opțiune activată implicit.
- --print-map-locals
- --no-print-map-locals
- Afișează (sau nu afișează) simbolurile locale în harta de legături. Simbolurile locale vor avea textul (local) afișat înaintea numelui lor și vor fi listate după toate simbolurile globale dintr-o anumită secțiune. Simbolurile locale temporare (de obicei cele care încep cu .L) nu vor fi incluse în ieșire. Opțiune dezactivată implicit.
- -n
- --nmagic
- Dezactivează alinierea secțiunilor pe pagină și dezactivează legarea la bibliotecile partajate. Dacă formatul de ieșire acceptă numere magice în stil Unix, marchează ieșirea ca "NMAGIC".
- -N
- --omagic
- Definește secțiunile de text și date astfel încât să fie citibile și inscriptibile. De asemenea, nu aliniază segmentul de date la pagină și dezactivează legarea la bibliotecile partajate. Dacă formatul de ieșire acceptă numere magice în stil Unix, marchează ieșirea ca "OMAGIC". Notă: Deși o secțiune de text inscriptibilă este permisă pentru țintele PE-COFF, aceasta nu respectă specificația de format publicată de Microsoft.
- --no-omagic
- Această opțiune anulează majoritatea efectelor opțiunii -N. Ea definește secțiunea de text ca fiind numai-pentru-citire și impune alinierea segmentului de date la pagină. Notă — această opțiune nu permite legarea la biblioteci partajate. Pentru aceasta, utilizați -Bdynamic.
- -o ieșirea
- --output=ieșirea
- Utilizează ieșirea ca nume pentru programul generat
de ld; dacă această opțiune nu este
specificată, se utilizează implicit numele a.out.
Comanda de script "OUTPUT" poate, de
asemenea, să specifice numele fișierului de ieșire.
Notă – editorul de legături va șterge fișierul de ieșire înainte de a începe să scrie în el. Va face acest lucru chiar și în cazul în care se constată că legarea nu poate fi finalizată din cauza unor erori.
Notă — editorul de legături va verifica dacă numele fișierului de ieșire nu coincide cu numele vreunui fișier de intrare, dar asta este tot. În special, nu va genera nicio eroare dacă fișierul de ieșire ar putea suprascrie un fișier sursă sau un alt fișier important. Prin urmare, în sistemele de compilare se recomandă utilizarea opțiunii -o ca ultimă opțiune în linia de comandă a editorului de legături. De exemplu, să luăm în considerare:
ld -o $(EXE) $(OBJS) ld $(OBJS) -o $(EXE)Dacă variabila EXE nu este definită din vreun motiv, prima variantă a comenzii de legare ar putea duce la ștergerea unuia dintre fișierele obiect (primul din lista OBJS), în timp ce a doua variantă a comenzii de legare va genera un mesaj de eroare și nu va șterge nimic.
- --dependency-file=fișier-dependențe
- Scrie un fișier de dependență în fișier-dependențe. Acest fișier conține o regulă compatibilă cu "make", care descrie fișierul de ieșire și toate fișierele de intrare citite pentru generarea acestuia. Rezultatul este similar cu cel obținut prin compilare cu opțiunea -M -MP. Rețineți că nu există o opțiune similară cu -MM a compilatorului, pentru a exclude „fișierele de sistem” (care nu este un concept bine definit în editorul de legături, spre deosebire de „antetele de sistem” din compilator). Prin urmare, ieșirea din --dependency-file este întotdeauna specifică stării exacte a instalării în care a fost generată și nu ar trebui copiată în fișierele makefile distribuite fără o editare atentă.
- -O nivel
- Dacă nivel este o valoare numerică mai mare
decât zero, ld optimizează rezultatul. Acest proces
poate dura mult mai mult și, prin urmare, ar trebui activat
probabil doar pentru fișierul binar final. În prezent,
această opțiune afectează doar generarea
bibliotecilor partajate ELF. Versiunile viitoare ale editorului de
legături ar putea utiliza mai mult această opțiune.
De asemenea, în prezent nu există nicio
diferență în comportamentul editorului de
legături pentru diferite valori diferite de zero ale acestei
opțiuni. Din nou, acest lucru se poate schimba în versiunile
viitoare.
Dacă nivel este zero sau șirul este fast, atunci ld omite operațiile opționale, ceea ce duce la o legătură mai rapidă, dar generează fișiere binare mai lente și mai mari. În prezent, singura operație omisă este combinarea secțiunilor care pot fi îmbinate, dar acest lucru se poate schimba în viitor.
Dacă nivel este șirul default sau doar caracterul -, atunci se selectează comportamentul implicit al editorului de legături, care nu optimizează și nici nu omite operațiile.
- -plugin nume
- Implică un modul în procesul de legare. Parametrul
nume reprezintă numele absolut al fișierului
modulului. De obicei, acest parametru este adăugat automat de
compilator atunci când se utilizează optimizarea la momentul
legării, dar utilizatorii pot adăuga și propriile
module, dacă doresc acest lucru.
Rețineți că locația modulelor generate de compilator este diferită de locul în care programele ar, nm și ranlib caută propriile module. Pentru ca aceste comenzi să poată utiliza un modul generat de compilator, acesta trebuie mai întâi copiat în directorul ${libdir}/bfd-plugins. Toate modulele de legare bazate pe gcc sunt compatibile cu versiunile anterioare, așa că este suficient să copiați doar cea mai recentă versiune.
- --push-state
- Opțiunea --push-state permite păstrarea stării
curente a fanioanelor care guvernează gestionarea fișierului
de intrare, astfel încât toate acestea să
poată fi restabilite cu o singură opțiune
--pop-state corespunzătoare.
Opțiunile incluse sunt: -Bdynamic, -Bstatic, -dn, -dy, -call_shared, -non_shared, -static, -N, -n, --whole-archive, --no-whole-archive, --link-mapless, --no-link-mapless, -r, -Ur, --copy-dt-needed-entries, --no-copy-dt-needed-entries, --as-needed, --no-as-needed, and -a.
Una dintre destinațiile acestei opțiuni sunt specificațiile pentru pkg-config. Atunci când este utilizată împreună cu opțiunea --libs, toate bibliotecile care ar putea fi necesare sunt listate și, eventual, legate în mod automat. Este recomandabil să se returneze ceva precum:
-Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state - --pop-state
- Anulează efectul opțiunii --push-state și restabilește valorile anterioare ale fanioanelor care reglementează gestionarea fișierelor de intrare.
- -q
- --emit-relocs
- Lasă secțiunile de realocare și conținutul
în executabilele complet legate. Instrumentele de analiză
și optimizare post-legare pot avea nevoie de aceste
informații pentru a efectua modificări corecte ale
executabilelor. Acest lucru are ca rezultat executabile mai mari.
În prezent, această opțiune este acceptată numai pe platformele ELF.
- --force-dynamic
- Forțează ca fișierul de ieșire să aibă secțiuni dinamice. Această opțiune este specifică obiectivelor VxWorks.
- -r
- --relocatable
- Generează o ieșire realocabilă — adică,
generează un fișier de ieșire care poate servi, la
rândul său, ca intrare pentru ld. Acest proces este
adesea denumit legare parțială. Ca efect secundar,
în mediile care acceptă numerele magice standard Unix,
această opțiune definește, de asemenea,
numărul magic al fișierului de ieșire ca fiind
"OMAGIC". Dacă această
opțiune nu este specificată, se generează un
fișier absolut. La legarea programelor C++, această
opțiune nu va rezolva referințele la constructori;
pentru a face acest lucru, utilizați -Ur.
Atunci 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ă fișierul de intrare respectiv nu conține nicio realocare. Diferitele formate de ieșire pot avea restricții suplimentare; de exemplu, unele formate bazate pe "a.out" nu acceptă deloc legarea parțială cu fișiere de intrare în alte formate.
Atunci când ieșirea realocabilă conține atât conținut care necesită optimizare la momentul legării (LTO), cât și conținut care nu necesită LTO, se va crea o secțiune .gnu_object_only care să conțină un fișier obiect realocabil, ca și cum s-ar aplica -r tuturor intrărilor realocabile care nu necesită LTO. La procesarea unei intrări realocabile cu o secțiune .gnu_object_only, editorul de legături va extrage secțiunea .gnu_object_only ca o intrare separată.
Rețineți că, întrucât -r grupează împreună anumite secțiuni din fișiere de intrare diferite, acest lucru poate avea un impact negativ asupra dimensiunii codului și asupra locației în biblioteca executabilă finală sau în biblioteca partajată.
Această opțiune face același lucru ca și opțiunea -i.
- -R nume-fișier
- --just-symbols=nume-fișier
- Citește numele simbolurilor și adresele acestora din
nume-fișier, dar nu le realocă și nu le
include în ieșire. Astfel, fișierul de ieșire
poate face referire simbolică la locațiile absolute din
memorie definite în alte programe. Puteți utiliza
această opțiune de mai multe ori.
Pentru compatibilitate cu alți editori de legături ELF, dacă opțiunea -R este urmată de un nume de director, în loc de un nume de fișier, aceasta este tratată ca opțiunea -rpath.
- --rosegment
- --no-rosegment
- Încearcă să se asigure că este creat doar un
singur segment fără cod, numai pentru citire. Utilă
numai atunci când este utilizată împreună cu
opțiunea -z separate-code. Binarele rezultate ar trebui
să fie mai mici decât în cazul în care -z
separate-code este utilizată singură. Fără
această opțiune sau dacă se specifică
--no-rosegment, opțiunea -z separate-code va crea
două segmente numai pentru citire, unul înaintea segmentului
de cod și unul după acesta.
Numele opțiunilor sunt înșelătoare, dar au fost alese pentru ca editorul de legături să fie compatibil cu editorii de legături LLD și GOLD.
Aceste opțiuni sunt acceptate numai de țintele ELF.
- -s
- --strip-all
- Omite toate informațiile despre simboluri din fișierul de ieșire.
- -S
- --strip-debug
- Omite informațiile despre simbolurile de depanare (dar nu toate simbolurile) din fișierul de ieșire.
- --strip-discarded
- --no-strip-discarded
- Omite (sau nu omite) simbolurile globale definite în secțiunile eliminate. Activată în mod implicit.
- -plugin-save-temps
- Stochează permanent fișierele intermediare „temporare” ale modulului.
- -t
- --trace
- Afișează numele fișierelor de intrare pe măsură ce ld le procesează. Dacă se specifică de două ori -t, se afișează și elementele din arhive. Ieșirea -t este utilă pentru a genera o listă cu toate fișierele obiect și scripturile implicate în procesul de legare, de exemplu, atunci când se pregătesc fișierele pentru un raport privind o eroare a editorului de legături.
- -T fișier-script
- --script=fișier-script
- Utilizează fișier-script ca script de legare. Acest
script înlocuiește scriptul de legare implicit al lui
ld (în loc să se adauge la acesta), cu
excepția cazului în care scriptul conține
"INSERT", astfel încât
fișier-comenzi trebuie să specifice tot ceea ce este
necesar pentru a descrie fișierul de ieșire.
Dacă fișier-script nu există în directorul curent, «ld» îl caută în directoarele specificate de opțiunile -L precedente.
Opțiunile din linia de comandă care apar înaintea opțiunii -T pot afecta scriptul, dar opțiunile din linia de comandă care apar după aceasta nu.
Mai multe opțiuni -T se vor cumula dacă suplimentează scriptul curent; în caz contrar, va fi utilizată ultima opțiune -T care nu suplimentează scriptul.
Există și alte modalități de a specifica scripturile editorului de legături. A se vedea
- -dT fișier-script
- --default-script=fișier-script
- Utilizează fișier-script ca script de editor de
legături implicit.
Această opțiune este similară cu opțiunea --script, cu excepția faptului că procesarea scriptului este amânată până după ce restul liniei de comandă a fost procesat. Acest lucru permite ca opțiunile plasate după opțiunea --default-script din linia de comandă să influențeze comportamentul scriptului de legare, ceea ce poate fi important atunci când linia de comandă a programului de legare nu poate fi controlată direct de utilizator;(de exemplu, deoarece linia de comandă este generată de un alt instrument, cum ar fi gcc).
- -u simbol
- --undefined=simbol
- Forțează introducerea simbolului simbol în
fișierul de ieșire ca simbol nedefinit. Această
operație poate, de exemplu, să declanșeze legarea
unor module suplimentare din bibliotecile standard. Comanda -u
poate fi repetată cu diferite argumente de opțiune pentru a
introduce simboluri nedefinite suplimentare. Această opțiune
este echivalentă cu comanda de script a editorului de
legături "EXTERN".
Dacă această opțiune este utilizată pentru a forța introducerea de module suplimentare în legătură și dacă simbolul rămâne nedefinit ca o eroare, atunci trebuie utilizată opțiunea --require-defined.
- --require-defined=simbol
- Solicită ca simbol să fie definit în fișierul de ieșire. Această opțiune este identică cu opțiunea --undefined, cu excepția faptului că, dacă simbol nu este definit în fișierul de ieșire, editorul de legături va genera o eroare și se va închide. Același efect poate fi obținut într-un script de legare utilizând împreună "EXTERN", "ASSERT" și "DEFINED". Această opțiune poate fi utilizată de mai multe ori pentru a impune definirea unor simboluri suplimentare.
- -Ur
- Pentru programele care nu utilizează constructori sau destructori,
sau pentru sistemele bazate pe ELF, această opțiune este
echivalentă cu -r: generează o ieșire
realocabilă — adică un fișier de ieșire
care poate servi, la rândul său, ca intrare pentru
ld. Pentru alte fișiere binare, însă,
opțiunea -Ur este similară cu -r, dar
rezolvă și referințele la constructori și
destructori.
Pentru acele sisteme în care -r și -Ur se comportă diferit, nu este posibilă utilizarea lui -Ur pentru fișierele care au fost la rândul lor legate cu -Ur; odată ce tabelul constructor a fost creat, nu se mai pot adăuga elemente la acesta. Utilizați -Ur numai pentru ultima legătură parțială, iar -r pentru celelalte.
- --orphan-handling=MOD
- Controlează modul în care sunt tratate secțiunile
orfane. O secțiune orfană este una care nu este
menționată în mod specific într-un script al
editorului de legături.
MOD poate avea oricare dintre următoarele valori:
- "place"
- Secțiunile orfane sunt plasate într-o secțiune de ieșire adecvată, conform strategiei descrise în Secțiuni orfane. Opțiunea --unique influențează, de asemenea, modul în care sunt plasate secțiunile.
- "discard"
- Toate secțiunile orfane sunt eliminate, prin plasarea lor în secțiunea /DISCARD/.
- "warn"
- Editorul de legături va plasa secțiunea orfană conform „place” și va afișa, de asemenea, un avertisment.
- "error"
- Editorul de legături va ieși cu o eroare dacă se găsește vreo secțiune orfană.
Dacă nu se specifică opțiunea --orphan-handling, valoarea implicită este "place".
- --unique[=SECȚIUNEA]
- Creează o secțiune de ieșire separată pentru fiecare secțiune de intrare care corespunde expresiei SECȚIUNEA, sau, dacă argumentul opțional cu caracter joker SECȚIUNEA lipsește, pentru fiecare secțiune de intrare „orfană”. O secțiune „orfană” este una care nu este menționată în mod specific într-un script de legare. Puteți utiliza această opțiune de mai multe ori în linia de comandă; aceasta împiedică îmbinarea normală a secțiunilor de intrare cu același nume, suprascriind atribuirea secțiunilor de ieșire dintr-un script de legare.
- -v
- --version
- -V
- Afișează numărul versiunii pentru ld. Opțiunea -V enumeră și emulările acceptate. Consultați, de asemenea, descrierea opțiunii --enable-linker-version din Opțiuni,,Opțiuni din linia de comandă care poate fi utilizată pentru a introduce șirul versiunii editorului de legături într-un binar.
- -x
- --discard-all
- Șterge toate simbolurile locale.
- -X
- --discard-locals
- Sterge toate simbolurile locale temporare; (aceste simboluri încep cu prefixele etichetelor locale specifice sistemului, de obicei .L pentru sistemele ELF sau L pentru sistemele tradiționale a.out).
- -y simbol
- --trace-symbol=simbol
- Afișează numele fiecărui fișier legat
în care simbol apare. Această opțiune poate fi
specificată de câte ori se dorește. Pe multe sisteme,
este necesar să se adauge un caracter de subliniere la
început.
Această opțiune este utilă atunci când aveți un simbol nedefinit în legătura dvs., dar nu știți de unde provine referința.
- -Y ruta
- Adaugă path la ruta de căutare implicită a bibliotecii. Această opțiune există pentru compatibilitate cu Solaris.
- -z cuvânt-cheie
- Cuvintele cheie recunoscute sunt:
- call-nop=prefix-addr
- call-nop=suffix-nop
- call-nop=prefix-octet
- call-nop=sufix-octet
- Specifică umplerea de 1 octet "NOP" la transformarea unui apel indirect către o funcție definită local, foo, prin intermediul slotului său GOT. call-nop=prefix-addr generează "0x67 call foo". call-nop=suffix-nop generează "call foo 0x90". call-nop=prefix-octet generează "byte call foo". call-nop=suffix-octet generează "call foo byte". Acceptată pentru i386 și x86_64.
- cet-report=none
- cet-report=warning
- cet-report=error
- Specifică modul în care se vor raporta proprietățile lipsă GNU_PROPERTY_X86_FEATURE_1_IBT și GNU_PROPERTY_X86_FEATURE_1_SHSTK în secțiunea .note.gnu.property din fișierul de intrare. cet-report=none, care este valoarea implicită, va face ca editorul de legături să nu raporteze proprietățile lipsă din fișierele de intrare. cet-report=warning va face ca editorul de legături să emită un avertisment pentru proprietățile lipsă din fișierele de intrare. cet-report=error va face ca editorul de legături să emită o eroare pentru proprietățile lipsă din fișierele de intrare. Rețineți că ibt va dezactiva raportarea lipsei proprietății GNU_PROPERTY_X86_FEATURE_1_IBT, iar shstk va dezactiva raportarea lipsei proprietății GNU_PROPERTY_X86_FEATURE_1_SHSTK. Implementată pentru Linux/i386 și Linux/x86_64.
- combreloc
- nocombreloc
- Combină mai multe secțiuni de realocare dinamică și sortează pentru a îmbunătăți memoria cache pentru căutarea dinamică a simbolurilor. Nu face acest lucru dacă se folosește nocombreloc.
- common
- nocommon
- Generează simboluri comune cu tipul STT_COMMON în timpul unei legături realocabile. Utilizează tipul STT_OBJECT dacă nocommon.
- common-page-size=valoare
- Stabilește dimensiunea paginii cea mai frecvent utilizată la valoare. Structura imaginii de memorie va fi optimizată pentru a reduce la minimum numărul de pagini de memorie, în cazul în care sistemul utilizează pagini de această dimensiune.
- defs
- Raportează referințele la simboluri nedefinite din fișierele obiect obișnuite. Aceasta se întâmplă chiar și în cazul în care editorul de legături creează o bibliotecă partajată nesimbolică. Această opțiune este inversul opțiunii -z undefs.
- dynamic-undefined-weak
- nodynamic-undefined-weak
- Transformă simbolurile slabe nedefinite în simboluri dinamice la compilarea unui obiect dinamic, dacă acestea sunt referențiate dintr-un fișier obiect obișnuit și nu sunt forțate să fie locale prin vizibilitatea simbolului sau prin versiune. Nu le transforma în simboluri dinamice dacă nodynamic-undefined-weak. Dacă nu se specifică nicio opțiune, o țintă poate aplica implicit una dintre aceste opțiuni sau poate alege o altă modalitate de a transforma simbolurile slabe nedefinite în simboluri dinamice. Nu toate țintele acceptă aceste opțiuni.
- execstack
- Marchează obiectul ca necesitând o stivă executabilă.
- global
- Această opțiune are sens doar atunci când se compilează un obiect partajat. Ea face ca simbolurile definite de acest obiect partajat să fie disponibile pentru rezolvarea simbolurilor din bibliotecile încărcate ulterior.
- globalaudit
- Această opțiune are sens doar atunci când se compilează un executabil dinamic. Această opțiune marchează executabilul ca necesitând audit global prin activarea bitului "DF_1_GLOBAUDIT" din eticheta dinamică "DT_FLAGS_1". Auditarea globală impune ca orice bibliotecă de audit definită prin opțiunile de linie de comandă --depaudit sau -P să fie executată pentru toate obiectele dinamice încărcate de aplicație.
- ibtplt
- Generează intrări PLT activate pentru Intel Indirect Branch Tracking (IBT). Acceptată în Linux/i386 și Linux/x86_64.
- ibt
- Generează GNU_PROPERTY_X86_FEATURE_1_IBT în secțiunea .note.gnu.property pentru a indica compatibilitatea cu IBT. Aceasta implică și ibtplt. Acceptată în Linux/i386 și Linux/x86_64.
- indirect-extern-access
- noindirect-extern-access
- Generează GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS în
secțiunea .note.gnu.property pentru a indica faptul că
fișierul obiect necesită indicatori de funcție
canonici și nu poate fi utilizată cu „copy
relocation”. Această opțiune implică, de
asemenea, noextern-protected-data și nocopyreloc.
Acceptată în i386 și x86-64.
noindirect-extern-access elimină GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS din secțiunea .note.gnu.property.
- initfirst
- Această opțiune are sens doar atunci când se compilează un obiect partajat. Ea marchează obiectul astfel încât inițializarea sa la rulare să aibă loc înaintea inițializării la rulare a oricăror alte obiecte introduse în proces în același timp. În mod similar, finalizarea la rulare a obiectului va avea loc după finalizarea la rulare a oricăror alte obiecte.
- interpose
- Specifică încărcătorului dinamic să-și modifice ordinea de căutare a simbolurilor, astfel încât simbolurile din această bibliotecă partajată să aibă prioritate față de toate celelalte biblioteci partajate care nu sunt marcate în acest fel.
- unique
- nounique
- Atunci când se generează o bibliotecă partajată sau un alt obiect ELF care poate fi încărcat dinamic, acesta trebuie marcat ca fiind unul care (în mod implicit) ar trebui încărcat o singură dată și numai în spațiul de nume principal (atunci când se utilizează "dlmopen"). Această opțiune este utilizată în principal pentru a marca biblioteci fundamentale, precum libc, libpthread și altele, care de obicei nu funcționează corect decât dacă sunt singurele instanțe ale lor. Acest comportament poate fi suprascris de către apelantul "dlmopen" și nu se aplică anumitor mecanisme de încărcare (cum ar fi bibliotecile de audit).
- lam-u48
- Generează GNU_PROPERTY_X86_FEATURE_1_LAM_U48 în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel LAM_U48. Acceptată în Linux/x86_64.
- lam-u57
- Generează GNU_PROPERTY_X86_FEATURE_1_LAM_U57 în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel LAM_U57. Acceptată în Linux/x86_64.
- lam-u48-report=none
- lam-u48-report=warning
- lam-u48-report=error
- Specifică modul în care se raportează lipsa proprietății GNU_PROPERTY_X86_FEATURE_1_LAM_U48 în secțiunea .note.gnu.property din fișierul de intrare. lam-u48-report=none, care este valoarea implicită, va face ca editorul de legături să nu raporteze proprietățile lipsă din fișierele de intrare. lam-u48-report=warning va face ca editorul de legături să emită un avertisment pentru proprietățile lipsă din fișierele de intrare. lam-u48-report=error va face ca editorul de legături să emită o eroare pentru proprietățile lipsă din fișierele de intrare. Implementată pentru Linux/x86_64.
- lam-u57-report=none
- lam-u57-report=warning
- lam-u57-report=error
- Specifică modul în care se raportează lipsa proprietății GNU_PROPERTY_X86_FEATURE_1_LAM_U57 în secțiunea .note.gnu.property din fișierul de intrare. lam-u57-report=none, care este valoarea implicită, va face ca editorul de legături să nu raporteze proprietățile lipsă din fișierele de intrare. lam-u57-report=warning va face ca editorul de legături să emită un avertisment pentru proprietățile lipsă din fișierele de intrare. lam-u57-report=error va face ca editorul de legături să emită o eroare pentru proprietățile lipsă din fișierele de intrare. Implementată pentru Linux/x86_64.
- lam-report=none
- lam-report=warning
- lam-report=error
- Specifică modul în care se vor raporta proprietățile lipsă GNU_PROPERTY_X86_FEATURE_1_LAM_U48 și GNU_PROPERTY_X86_FEATURE_1_LAM_U57 în secțiunea .note.gnu.property din fișierul de intrare. lam-report=none, care este valoarea implicită, va face ca editorul de legături să nu raporteze proprietățile lipsă din fișierele de intrare. lam-report=warning va face ca editorul de legături să emită un avertisment pentru proprietățile lipsă din fișierele de intrare. lam-report=error va face ca editorul de legături să emită o eroare pentru proprietățile lipsă din fișierele de intrare. Implementată pentru Linux/x86_64.
- lazy
- La generarea unui executabil sau a unei biblioteci partajate, îl/o marchează pentru a indica editorului de legături dinamice să amâne rezolvarea apelurilor de funcții până în momentul în care funcția este apelată (legare leneșă), în loc să o facă în momentul încărcării. Legarea leneșă este valoarea implicită.
- loadfltr
- Specifică ca filtrele obiectului să fie procesate imediat în timpul rulării.
- max-page-size=valoare
- Stabilește dimensiunea maximă a paginii de memorie acceptată la valoare.
- mark-plt
- nomark-plt
- Marchează intrările PLT cu etichetele dinamice DT_X86_64_PLT, DT_X86_64_PLTSZ și DT_X86_64_PLTENT. Deoarece această opțiune stochează o valoare diferită de zero în câmpul r_addend al realocărilor R_X86_64_JUMP_SLOT, executabilele și bibliotecile partajate rezultate sunt incompatibile cu editoarele de legături dinamice, cum ar fi cele din versiunile mai vechi ale glibc care nu au fost modificate pentru a ignora câmpul r_addend din realocările R_X86_64_GLOB_DAT și R_X86_64_JUMP_SLOT, care nu ignoră câmpul r_addend al realocărilor R_X86_64_JUMP_SLOT. Implementată pentru x86_64.
- muldefs
- Permite definiții multiple.
- nocopyreloc
- Dezactivează variabilele .dynbss generate de către editorul de legături utilizate în locul variabilelor definite în bibliotecile partajate. Poate duce la realocări dinamice ale textului.
- nodefaultlib
- Specifică ca încărcătorul dinamic să ignore toate rutele implicite de căutare a bibliotecilor atunci când caută dependențele acestui obiect.
- nodelete
- Specificați că obiectul nu trebuie descărcat în timpul rulării.
- nodlopen
- Specifică faptul că obiectul nu este disponibil pentru "dlopen".
- nodump
- Specifică faptul că obiectul nu poate fi descărcat (pentru afișare) de "dldump".
- noexecstack
- Marchează obiectul ca neavând nevoie de stivă executabilă.
- noextern-protected-data
- Nu tratează simbolurile de date protejate ca fiind externe atunci când se compilează o bibliotecă partajată. Această opțiune suprascrie comportamentul implicit al backend-ului editorului de legături. Poate fi utilizată pentru a remedia realocările incorecte ale simbolurilor de date protejate generate de compilator. Actualizările aduse simbolurilor de date protejate de către un alt modul nu sunt vizibile pentru biblioteca partajată rezultată. Implementată pentru i386 și x86-64.
- noreloc-overflow
- Dezactivează verificarea depășirii realocării. Aceasta poate fi utilizată pentru a dezactiva verificarea depășirii realocării dacă nu va exista o depășire dinamică a realocării la momentul rulării. Compatibil pentru x86_64.
- memory-seal
- nomemory-seal
- Indică fișierului executabil sau bibliotecii partajate că toate segmentele PT_LOAD trebuie sigilate pentru a evita manipularea ulterioară (cum ar fi modificarea fanioanelor de protecție, a dimensiunii segmentului sau eliminarea cartografierii). Aceasta este o măsură de consolidare a securității care necesită suport din partea sistemului. Aceasta generează GNU_PROPERTY_MEMORY_SEAL în secțiunea .note.gnu.property
- now
- Când generează un fișier executabil sau o bibliotecă partajată, îl/o marchează pentru a indica editorului de legături dinamice să rezolve toate simbolurile la pornirea programului sau la încărcarea bibliotecii partajate prin dlopen, în loc să amâne rezolvarea apelurilor de funcții până în momentul în care funcția este apelată pentru prima dată.
- origin
- Specifică faptul că obiectul necesită gestionarea $ORIGIN în rute.
- pack-relative-relocs
- nopack-relative-relocs
- Generează realocare relativă compactă în executabilele independente de poziție și în bibliotecile partajate. Adaugă intrările "DT_RELR", "DT_RELRSZ" și "DT_RELRENT" în secțiunea dinamică. Este ignorată la compilarea executabilelor dependente de poziție și a ieșirilor realocabile. nopack-relative-relocs este valoarea implicită, care dezactivează realocarea relativă compactă. Atunci când se realizează legarea cu biblioteca GNU C, se adaugă la ieșire o dependență de versiune a simbolului GLIBC_ABI_DT_RELR față de biblioteca C partajată. Implementată pentru i386 și x86-64 și RISC-V.
- relro
- norelro
- Creează un antet de segment ELF "PT_GNU_RELRO" în obiect. Acesta specifică un segment de memorie care ar trebui să fie făcut numai-pentru-citire după realocare, dacă este acceptat. Specificarea unei common-page-size (dimensiuni obișnuite a paginii) mai mică decât dimensiunea paginii sistemului va face ca această protecție să fie ineficientă. Nu creează un segment ELF "PT_GNU_RELRO" dacă norelro.
- report-relative-reloc
- Raportează realocările relative dinamice generate de editorul de legături. Este acceptat pentru Linux/i386 și Linux/x86_64.
- sectionheader
- nosectionheader
- Generează antetul secțiunii. Nu se generează antetul secțiunii dacă se utilizează nosectionheader. sectionheader este opțiunea implicită.
- separate-code
- noseparate-code
- Creați un antet de segment separat de cod "PT_LOAD" în obiect. Acesta specifică un segment de memorie care trebuie să conțină numai instrucțiuni și care trebuie să se afle în pagini complet separate de orice alte date. Nu creează un segment separat de cod "PT_LOAD" dacă se utilizează noseparate-code.
- shstk
- Generează GNU_PROPERTY_X86_FEATURE_1_SHSTK în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel Shadow Stack; pentru Linux/i386 și Linux/x86_64.
- stack-size=valoare
- Specifică dimensiunea stivei pentru segmentul ELF "PT_GNU_STACK". Dacă se specifică valoarea zero, aceasta va suprascrie orice creare implicită a segmentului "PT_GNU_STACK" cu o dimensiune diferită de zero.
- start-stop-gc
- nostart-stop-gc
- Când --gc-sections este activă, o referință dintr-o secțiune păstrată către "__start_SECNAME" sau "__stop_SECNAME" determină ca toate secțiunile de intrare denumite "SECNAME" să fie, de asemenea, păstrate, dacă "SECNAME(C' este reprezentabil ca un identificator C și fie "__start_SECNAME", fie "__stop_SECNAME" este sintetizat de către editorul de legături. -z start-stop-gc dezactivează acest efect, permițând ca secțiunile să fie supuse colectării de gunoi ca și cum simbolurile speciale sintetizate nu ar fi fost definite. -z start-stop-gc nu are niciun efect asupra unei definiții de "__start_SECNAME" sau "__stop_SECNAME" dintr-un fișier obiect sau dintr-un script de legare. O astfel de definiție va împiedica editorul de legături să furnizeze un "__start_SECNAME" sau, respectiv, un "__stop_SECNAME" sintetizat și, prin urmare, tratamentul special aplicat de colectarea deșeurilor pentru acele referințe.
- start-stop-visibility=valoare
- Specifică vizibilitatea simbolurilor ELF pentru simbolurile sintetizate "__start_SECNAME" și "__stop_SECNAME". valoare trebuie să fie exact default, internal, hidden sau protected. Dacă nu se specifică nicio opțiune -z start-stop-visibility, se utilizează protected din motive de compatibilitate cu practicile anterioare. Cu toate acestea, se recomandă cu tărie utilizarea opțiunii -z start-stop-visibility=hidden în programele noi și în bibliotecile partajate, astfel încât aceste simboluri să nu fie exportate între obiectele partajate, ceea ce nu este, de obicei, intenția dorită.
- text
- notext
- textoff
- Raportează o eroare dacă DT_TEXTREL este activat, adică dacă obiectul independent de poziție sau obiectul partajat conține realocări dinamice în secțiuni de tip „doar citire”. Nu raportează o eroare dacă notext sau textoff.
- undefs
- Nu raportează referințele la simboluri nerezolvate din fișiere obiect obișnuite, fie la crearea unui executabil, fie la crearea unei biblioteci partajate. Această opțiune este inversă față de -z defs.
- unique-symbol
- nounique-symbol
- Evitarea dublării numelor simbolurilor locale în tabelul șirurilor de simboluri. Adaugă „."number"” la numele simbolurilor locale duplicate dacă se utilizează unique-symbol. nounique-symbol este valoarea implicită.
- x86-64-baseline
- x86-64-v2
- x86-64-v3
- x86-64-v4
- Specifică nivelul ISA x86-64 necesar în secțiunea .note.gnu.property. x86-64-baseline generează "GNU_PROPERTY_X86_ISA_1_BASELINE". x86-64-v2 generează "GNU_PROPERTY_X86_ISA_1_V2". x86-64-v3 generează "GNU_PROPERTY_X86_ISA_1_V3". x86-64-v4 generează "GNU_PROPERTY_X86_ISA_1_V4". Acceptată pentru Linux/i386 și Linux/x86_64.
- isa-level-report=none
- isa-level-report=all
- isa-level-report=needed
- isa-level-report=used
- Specificați modul de raportare a nivelurilor ISA x86-64 în fișierele de intrare realocabile. isa-level-report=none, care este valoarea implicită, va face ca editorul de legături să nu raporteze nivelurile ISA x86-64 din fișierele de intrare. isa-level-report=all va face ca editorul de legături să raporteze nivelurile ISA x86-64 necesare și utilizate în fișierele de intrare. isa-level-report=needed va face ca editoul de legături să raporteze nivelurile ISA x86-64 necesare din fișierele de intrare. isa-level-report=used va face ca editorul de legături să raporteze nivelurile ISA x86-64 utilizate din fișierele de intrare. Implementată pentru Linux/i386 și Linux/x86_64.
- zicfilp=implicit
- zicfilp=unlabeled
- zicfilp=never
- Specifică modul de marcare a ieșirii cu GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED în secțiunea .note.gnu.property, ceea ce indică compatibilitatea cu schema de „landing pad” fără etichete a extensiei Zicfilp. zicfilp=implicit, care este valoarea implicită, marchează ieșirea numai dacă toate fișierele de intrare realocabile au această proprietate. zicfilp=unlabeled marchează întotdeauna ieșirea. zicfilp=never nu marchează niciodată ieșirea. Se generează intrări PLT cu „landing pads” dacă ieșirea este marcată. Implementată pentru RISC-V.
- zicfilp-unlabeled-report=none
- zicfilp-unlabeled-report=warning
- zicfilp-unlabeled-report=error
- Specifică modul de raportare a fișierelor realocabile de intrare care nu au GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED. zicfilp-unlabeled-report=none, care este valoarea implicită, nu raportează nimic. zicfilp-unlabeled-report=warning generează un avertisment, iar zicfilp-unlabeled-report=error generează o eroare pentru fiecare astfel de fișier.Implementată pentru RISC-V.
- zicfiss=implicit
- zicfiss=always
- zicfiss=never
- Specifică modul de marcare a ieșirii cu GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS în secțiunea .note.gnu.property, ceea ce indică compatibilitatea cu stiva-ascunsă a extensiei Zicfiss. zicfiss=implicit, care este valoarea implicită, marchează ieșirea numai dacă toate fișierele de intrare realocabile au această proprietate. zicfiss=always marchează întotdeauna ieșirea. zicfiss=never nu marchează niciodată ieșirea. Implementată pentru RISC-V.
- zicfiss-report=none
- zicfiss-report=warning
- zicfiss-report=error
- Specifică modul de raportare a fișierelor de intrare realocabile fără GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS. zicfiss-report=none, care este valoarea implicită, nu raportează nimic. zicfiss-report=warning raportează un avertisment, iar zicfiss-report=error raportează o eroare pentru fiecare astfel de fișier. Implementată pentru RISC-V.
Alte cuvinte-cheie sunt ignorate pentru compatibilitate cu Solaris.
- --gnu-tls-tag
- --no-gnu-tls-tag
- Adaugă dependența de eticheta de versiune "GLIBC_ABI_GNU_TLS" în programele de ieșire și în bibliotecile partajate atunci când se realizează legarea cu glibc, dacă fișierele obiect reqlocabile de intrare apelează "___tls_get_addr". Rezultatul nu se va încărca și nu va rula la momentul execuției cu glibc care nu definește eticheta de versiune "GLIBC_ABI_GNU_TLS". Cu excepția cazului în care este dezactivată prin opțiunea de configurare --disable-gnu-tls-tag în momentul compilării editorului de legături, atunci când nu sunt specificate opțiuni, editorul de legături va adăuga eticheta de versiune "GLIBC_ABI_GNU_TLS(C' dacă intrările conțin apelul "___tls_get_addr" și libc.so definește eticheta de versiune "GLIBC_ABI_GNU_TLS". Implementată pentru Linux/i386.
- --gnu2-tls-tag
- --no-gnu2-tls-tag
- Adaugă "GLIBC_ABI_GNU2_TLS(C' în programele de ieșire și în bibliotecile partajate atunci când se realizează legarea cu glibc, dacă fișierele obiect realocabile de intrare au realocarea "R_386_TLS_DESC_CALL" sau "R_X86_64_TLSDESC_CALL". Rezultatul nu se va încărca și nu va rula la momentul execuției cu glibc, care nu definește eticheta de versiune "GLIBC_ABI_GNU2_TLS". Cu excepția cazului în care este dezactivată prin opțiunea de configurare --disable-gnu2-tls-tag în momentul compilării editorului de legături, atunci când nu sunt specificate opțiuni, editorul de legături va adăuga dependența de eticheta de versiune "GLIBC_ABI_GNU2_TLS" dacă intrările conțin (C`R_386_TLS_DESC_CALL" sau "R_X86_64_TLSDESC_CALL" și libc.so definește eticheta de versiune "GLIBC_ABI_GNU2_TLS". Implementată pentru Linux/i386 și Linux/x86_64.
- -( arhive -)
- --start-group archive --end-group
- arhive trebuie să fie o listă de fișiere de
arhivă. Acestea pot fi fie nume explicite de fișiere, fie
opțiuni -l.
Arhivele specificate sunt căutate în mod repetat până când nu mai sunt create referințe nedefinite noi. În mod normal, o arhivă este căutată o singură dată, în ordinea în care este specificată în linia de comandă. Dacă un simbol din acea arhivă este necesar pentru a rezolva un simbol nedefinit la care face referire un obiect dintr-o arhivă care apare mai târziu în linia de comandă, editorul de legături nu ar putea rezolva acea referință. Prin gruparea arhivelor, toate vor fi căutate în mod repetat până când toate referințele posibile sunt rezolvate.
Această opțiune nu este permisă în cadrul unei perechi de opțiuni --start-lib/--end-lib.
Utilizarea acestei opțiuni are un impact semnificativ asupra performanței. Este recomandat să o folosiți doar atunci când există referințe circulare inevitabile între două sau mai multe arhive.
- --start-group obiecte --end-group
- obiectele trebuie să fie o listă de fișiere
obiect.
Obiectele specificate sunt tratate ca și cum ar fi membre ale unei arhive al cărei nume a fost plasat în locația --start-lib în linia de comandă. Toate proprietățile obișnuite de gestionare a arhivelor de către editorulde legături și opțiunile din linia de comandă se aplică unei astfel de arhive artificiale.
Această opțiune poate fi utilizată de mai multe ori; în acest caz, fiecare set de obiecte specificate va fi tratat ca o arhivă separată. Cu toate acestea, nu este permisă imbricarea acestei opțiuni.
Opțiunile care afectează procesarea arhivei nu sunt permise între --start-lib și --end-lib, deoarece nu ar avea sens să fie aplicate în mijlocul procesării unei arhive. Aceste opțiuni includ: -(/--start-group, -)/--end-group, --whole-archive și --no-whole-archive, precum și --pop-state, acolo unde ar modifica starea configurării --whole-archive.
- --accept-unknown-input-arch
- --no-accept-unknown-input-arch
- Indică editorului de legături să accepte fișierele de intrare a căror arhitectură nu poate fi recunoscută. Se presupune că utilizatorul știe ce face și dorește în mod deliberat să includă aceste fișiere de intrare necunoscute. Acesta era comportamentul implicit al editorului de legături înainte de versiunea 2.14. Începând cu versiunea 2.14, comportamentul implicit este de a respinge astfel de fișiere de intrare, astfel încât opțiunea --accept-unknown-input-arch a fost adăugată pentru a restabili comportamentul anterior.
- --as-needed
- --no-as-needed
- Această opțiune afectează etichetele ELF DT_NEEDED
pentru bibliotecile dinamice menționate în linia de
comandă după opțiunea --as-needed. În
mod normal, editorul de legături va adăuga o etichetă
DT_NEEDED pentru fiecare bibliotecă dinamică
menționată în linia de comandă, indiferent
dacă biblioteca este sau nu necesară efectiv.
--as-needed face ca o etichetă DT_NEEDED să fie
emisă numai pentru o bibliotecă care, în acel
moment al legării, satisface o referință la un
simbol nedefinit non-slab dintr-un fișier obiect obișnuit
sau, dacă biblioteca nu se găsește în listele
DT_NEEDED ale altor biblioteci necesare, o referință la un
simbol nedefinit non-slab dintr-o altă bibliotecă
dinamică necesară. Fișierele obiect sau bibliotecile
care apar în linia de comandă după biblioteca
în cauză nu influențează faptul că
biblioteca este considerată necesară. Acest lucru este
similar cu regulile de extragere a fișierelor obiect din arhive.
--no-as-needed restabilește comportamentul implicit.
Notă: În sistemele bazate pe Linux, opțiunea --as-neededed are, de asemenea, un efect asupra comportamentului opțiunilor --rpath și --rpath-link. Pentru mai multe detalii, consultați descrierea opțiunii --rpath-link.
- --add-needed
- --no-add-needed
- Aceste două opțiuni au fost depreciate din cauza similitudinii numelor lor cu opțiunile --as-needed și --no-as-needed. Ele au fost înlocuite de --copy-dt-needed-entries și --no-copy-dt-needed-entries.
- -assert cuvânt-cheie
- Această opțiune este ignorată pentru compatibilitate cu SunOS.
- -Bdynamic
- -dy
- Legare la biblioteci dinamice. Această opțiune are sens doar pe platformele care acceptă biblioteci partajate. Pe astfel de platforme, această opțiune este, de obicei, cea implicită. Diferitele variante ale acestei opțiuni sunt destinate compatibilității cu diverse sisteme. Puteți utiliza această opțiune de mai multe ori în linia de comandă: ea influențează căutarea bibliotecilor pentru opțiunile -l care o urmează.
- -Bgroup
- Activează fanionul "DF_1_GROUP" în intrarea "DT_FLAGS_1" din secțiunea dinamică. Aceasta determină ca editorul de legături în timpul rulării să gestioneze căutările în acest obiect și în dependențele sale astfel încât acestea să fie efectuate numai în interiorul grupului. --unresolved-symbols=report-all este implicită. Această opțiune are sens numai pe platformele ELF care acceptă biblioteci partajate.
- -Bstatic
- -dn
- -static
- Nu creaeză legături către bibliotecile partajate. Această opțiune are sens doar pe platformele care acceptă biblioteci partajate. Diferitele variante ale acestei opțiuni sunt destinate compatibilității cu diverse sisteme. Puteți utiliza această opțiune de mai multe ori în linia de comandă: ea influențează căutarea bibliotecilor pentru opțiunile -l care o urmează. Această opțiune implică, de asemenea, --unresolved-symbols=report-all. Această opțiune poate fi utilizată împreună cu -shared. Aceasta înseamnă că se creează o bibliotecă partajată, dar că toate referințele externe ale bibliotecii trebuie rezolvate prin preluarea intrărilor din bibliotecile statice.
- -Bsymbolic
- Când se creează o bibliotecă partajată, leagă referințele la simbolurile funcțiilor globale de definiția din cadrul bibliotecii partajate, dacă aceasta există. În mod normal, un program legat la o bibliotecă partajată poate suprascrie definiția din cadrul bibliotecii partajate. Această opțiune are sens doar pe platformele ELF care acceptă biblioteci partajate.
- -Bsymbolic-functions
- Când se creează o bibliotecă partajată, leagă referințele la simbolurile funcțiilor globale de definiția din cadrul bibliotecii partajate, dacă aceasta există. Această opțiune are sens doar pe platformele ELF care acceptă biblioteci partajate.
- -Bno-symbolic
- Această opțiune poate anula opțiunile -Bsymbolic și -Bsymbolic-functions specificate anterior.
- --dynamic-list=fișier-de-listă-dinamică
- Specifică numele unui fișier cu listă dinamică
pentru editorul de legături. Această opțiune este
utilizată de obicei atunci când se creează biblioteci
partajate, pentru a specifica o listă de simboluri globale ale
căror referințe nu trebuie legate de definiția din
biblioteca partajată, sau atunci când se creează
executabile legate dinamic, pentru a specifica o listă de simboluri
care trebuie adăugate la tabelul de simboluri din executabil.
Această opțiune are sens numai pe platformele ELF care
acceptă biblioteci partajate.
Formatul listei dinamice este identic cu cel al nodului de versiune, fără domeniul de aplicare și numele nodului. Pentru mai multe informații, consultați VERSION.
- --dynamic-list-data
- Include toate simbolurile de date globale în lista dinamică.
- --dynamic-list-cpp-new
- Furnizează lista dinamică integrată pentru operatorii C++ „new” și „delete”. Aceasta este utilă în special pentru compilarea bibliotecii libstdc++ partajate.
- --dynamic-list-cpp-typeinfo
- Furnizează lista dinamică integrată pentru identificarea tipurilor în timpul rulării în C++.
- --check-sections
- --no-check-sections
- Solicită editorului de legături să nu verifice adresele secțiunilor după ce acestea au fost alocate pentru a vedea dacă există suprapuneri. În mod normal, editorul de legături va efectua această verificare și, dacă găsește suprapuneri, va produce mesaje de eroare corespunzătoare. Editorul de legături are cunoștință și ține cont de secțiunile care se suprapun. Comportamentul implicit poate fi restabilit prin utilizarea opțiunii din linia de comandă --check-sections. De obicei, suprapunerea secțiunilor nu este verificată pentru legăturile realocabile. Puteți forța verificarea în acest caz folosind opțiunea --check-sections.
- --copy-dt-needed-entries
- --no-copy-dt-needed-entries
- Această opțiune influențează modul de tratare
a bibliotecilor dinamice la care se face referire prin etichetele
DT_NEEDED din bibliotecile dinamice ELF menționate în
linia de comandă. În mod normal, editorul de legături
nu va adăuga o etichetă DT_NEEDED în fișierul
binar de ieșire pentru fiecare bibliotecă
menționată într-o etichetă DT_NEEDED dintr-o
bibliotecă dinamică de intrare. Cu toate acestea,
dacă se specifică --copy-dt-needed-entries în
linia de comandă, orice biblioteci dinamice care urmează
după aceasta vor avea intrările DT_NEEDED adăugate.
Comportamentul implicit poate fi restabilit cu
--no-copy-dt-needed-entries.
Această opțiune are, de asemenea, un efect asupra rezolvării simbolurilor din bibliotecile dinamice. Cu opțiunea --copy-dt-needed-entries, bibliotecile dinamice menționate în linia de comandă vor fi căutate recursiv, urmând etichetele DT_NEEDED ale acestora către alte biblioteci, pentru a rezolva simbolurile necesare binarului de ieșire. Cu valoarea implicită, însă, căutarea în bibliotecile dinamice care urmează după aceasta se va opri la biblioteca dinamică respectivă. Nu vor fi parcurse legături DT_NEEDED pentru a rezolva simbolurile.
- --cref
- Generează un tabel de referințe încrucișate.
Dacă se generează un fișier de hartă pentru
editorul de legături, tabelul de referințe
încrucișate este inclus în fișierul de
hartă. În caz contrar, acesta este afișat la
ieșirea standard.
Formatul tabelului este simplu în mod intenționat, astfel încât să poată fi prelucrat cu ușurință de un script, dacă este necesar. Simbolurile sunt afișate, sortate după nume. Pentru fiecare simbol, este prezentată o listă de nume de fișiere. Dacă simbolul este definit, primul fișier din listă indică locația definiției. Dacă simbolul este definit ca valoare comună, urmează apoi toate fișierele în care apar această definiție. În final, sunt enumerate toate fișierele care fac referire la simbol.
- --ctf-variables
- --no-ctf-variables
- Formatul CTF debuginfo acceptă o secțiune care codifică numele și tipurile variabilelor din program care nu apar în niciun tabel de simboluri. Este evident că aceste variabile nu pot fi căutate după adresă de către depanatoarele convenționale, astfel încât spațiul utilizat pentru tipurile și numele lor este de obicei irosit: tipurile sunt de obicei mici, dar numele nu sunt adesea așa. --ctf-variables determină generarea unei astfel de secțiuni. Comportamentul implicit poate fi restabilit cu --no-ctf-variables.
- --ctf-share-types=metoda
- Ajustează metoda utilizată pentru partajarea tipurilor între unitățile de conversie în CTF.
- Pune toate tipurile care nu au definiții ambigue în dicționarul comun, unde programele de depanare le pot accesa cu ușurință, chiar dacă acestea apar doar într-o singură unitate de traducere. Aceasta este opțiunea implicită.
- Introduce în dicționarul comun doar tipurile care apar în mai multe unități de traducere: tipurile cu o singură definiție se introduc în dicționarele specifice fiecărei unități de traducere. Tipurile cu definiții ambigue în mai multe unități de traducere sunt întotdeauna incluse în dicționarele specifice fiecărei unități de traducere. Acest lucru tinde să mărească dimensiunea CTF-ului, dar poate reduce cantitatea de CTF din dicționarul comun. În cazul proiectelor foarte mari, acest lucru poate accelera deschiderea CTF-ului și economisi memorie în consumatorul CTF în timpul rulării.
- --no-define-common
- Această opțiune împiedică alocarea de adrese
simbolurilor comune. Comanda de script
"INHIBIT_COMMON_ALLOCATION" are
același efect.
Opțiunea --no-define-common permite separarea deciziei de alocare a adreselor simbolurilor comune de alegerea tipului fișierului de ieșire; în caz contrar, un tip de ieșire care nu este realocabil impune alocarea de adrese simbolurilor comune. Utilizarea opțiunii --no-define-common permite ca simbolurilor comune la care se face 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, de asemenea, previne orice posibilă confuzie legată de rezolvarea către duplicatul greșit atunci când există multe module dinamice cu rute de căutare specializate pentru rezolvarea simbolurilor în timpul rulării.
- --force-group-allocation
- Această opțiune determină editorul de legături să plaseze membrii grupului de secțiuni ca pe niște secțiuni de intrare obișnuite și să șteargă grupurile de secțiuni. Acesta este comportamentul implicit pentru o legătură finală, dar această opțiune poate fi utilizată pentru a modifica comportamentul unei legături realocabile (-r). Comanda de script "FORCE_GROUP_ALLOCATION" are același efect.
- --defsym=simbol=expresia
- Creează un simbol global în fișierul de
ieșire, conținând 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 acceptată pentru expresia în
acest context: puteți da o constantă hexazecimală sau
numele unui simbol existent, sau puteți utiliza
"+" și
"-" pentru a adăuga sau a
scădea constante hexazecimale sau simboluri. Dacă
aveți nevoie de expresii mai elaborate, luați în
considerare utilizarea limbajului de comandă pentru editorul de
legături dintr-un script. Notă: nu trebuie să
existe spațiu alb între simbol, semnul egal
(„=”) și expresie.
Editorul de legături procesează argumentele de tip --defsym și -T în ordine; plasarea lui --defsym înaintea lui -T va defini simbolul înainte ca scriptul de editare de legături din -T să fie procesat, în timp ce plasarea lui --defsym după -T va defini simbolul după ce scriptul de editare de legături a fost procesat. Această diferență are consecințe asupra expresiilor din scriptul editorului de legături care utilizează simbolurile --defsym, iar ordinea corectă va depinde de ceea ce doriți să obțineți.
- --demangle[=stil]
- --no-demangle
- Aceste opțiuni controlează dacă se efectuează decodificarea numelor de simboluri în mesajele de eroare și în alte ieșiri. Când editorului de legături i se indică să efectueze decodificarea, acesta încearcă să prezinte numele de simboluri într-un format lizibil: elimină caracterele de subliniere de la început, dacă acestea sunt utilizate de formatul fișierului obiect, și convertește numele de simboluri codificate în C++ în nume lizibile pentru utilizator. Diferite compilatoare au stiluri diferite de modificare a numelor simbolurilor. Argumentul opțional al stilului de redare a numelor simbolurilor poate fi utilizat pentru a alege un stil adecvat pentru compilatorul dumneavoastră. Editorul va decodifica numele simbolurilor în mod implicit, cu excepția cazului în care este activată variabila de mediu COLLECT_NO_DEMANGLE. Aceste opțiuni pot fi utilizate pentru a suprascrie valoarea implicită.
- -Ifișier
- --dynamic-linker=fișier
- Stabilește numele editorului de legături dinamice. Această opțiune are sens doar atunci când se generează executabile ELF cu legături dinamice. Editorul de legături dinamice implicit este, de obicei, cel potrivit; nu folosi această opțiune decât dacă știi exact ce faci.
- --no-dynamic-linker
- Când se generează un fișier executabil, se omite solicitarea de utilizare a unui editor de legături dinamice în momentul încărcării. Acest lucru are relevanță doar pentru fișierele executabile ELF care conțin realocări dinamice și, de obicei, necesită un cod de punct de intrare capabil să proceseze aceste realocări.
- --embedded-relocs
- Această opțiune este similară cu opțiunea --emit-relocs, cu excepția faptului că realocările sunt stocate într-o secțiune specifică destinației. Această opțiune este acceptată doar de țintele BFIN, CR16 și M68K.
- --disable-multiple-abs-defs
- Nu permite definiții multiple cu simboluri incluse în numele fișierului invocat de „-R” sau „--just-symbols”
- --fatal-warnings
- --no-fatal-warnings
- Tratează toate avertismentele ca erori. Comportamentul implicit poate fi restabilit cu opțiunea --no-fatal-warnings.
- -w
- --no-warnings
- Nu afișează niciun mesaj de avertizare sau eroare. Această opțiune prevalează asupra opțiunii --fatal-warnings dacă aceasta a fost activată. Această opțiune poate fi utilizată atunci când se știe că binarul de ieșire nu va funcționa, dar este totuși necesar să fie creat.
- --force-exe-suffix
- Se asigură că un fișier de ieșire are un sufix
.exe.
Dacă un fișier de ieșire complet legat, compilat cu succes, nu are sufixul ".exe" sau ".dll", această opțiune obligă programul de legare să copieze fișierul de ieșire într-unul cu același nume, dar cu sufixul ".exe". Această opțiune este utilă atunci când se utilizează fișiere makefile Unix nemodificate pe o mașină gazdă Microsoft Windows, deoarece unele versiuni de Windows nu vor rula o imagine decât dacă aceasta se termină cu sufixul ".exe".
- --gc-sections
- --no-gc-sections
- Activează colectarea gunoiului din secțiunile de intrare
neutilizate. Este ignorată pe țintele care nu acceptă
această opțiune. Comportamentul implicit (de a nu efectua
această colectare a gunoiului) poate fi restabilit prin
specificarea --no-gc-sections în linia de comandă.
Rețineți că colectarea gunoiului pentru obiectivele
în format COFF și PE este acceptată, dar
implementarea este considerată în prezent
experimentală.
--gc-sections decide care secțiuni de intrare sunt utilizate, examinând simbolurile și realocările. Secțiunea care conține simbolul de intrare și toate secțiunile care conțin simboluri nedefinite în linia de comandă vor fi păstrate, la fel ca și secțiunile care conțin simboluri la care fac referire obiectele dinamice. Rețineți că, atunci când se construiesc biblioteci partajate, editorul de legături trebuie să presupună că orice simbol vizibil este referențiat. Odată ce acest set inițial de secțiuni a fost determinat, editorul de legături marchează recursiv ca fiind utilizate toate secțiunile referențiate de realocările lor. Consultați --entry, --undefined și --gc-keep-exported.
Această opțiune poate fi activată atunci când se efectuează o legare parțială (activată cu opțiunea -r). În acest caz, rădăcina simbolurilor păstrate trebuie specificată în mod explicit fie prin una dintre opțiunile --entry, --undefined sau --gc-keep-exported, fie prin comanda "ENTRY" din scriptul de legare.
Ca o extensie GNU, secțiunile de intrare ELF marcate cu fanionul "SHF_GNU_RETAIN" nu vor fi colectate la gunoi.
- --print-gc-sections
- --no-print-gc-sections
- Listează toate secțiunile eliminate prin colectarea gunoiului. Lista este afișată la ieșirea de eroare standard. Această opțiune este eficientă numai dacă colectarea gunoiului a fost activată prin intermediul opțiunii --gc-sections. Comportamentul implicit (de a nu lista secțiunile care sunt eliminate) poate fi restabilit prin specificarea --no-print-gc-sections în linia de comandă.
- --gc-keep-exported
- Când opțiunea --gc-sections este activată, această opțiune împiedică colectarea deșeurilor din secțiunile de intrare neutilizate care conțin simboluri globale cu vizibilitate implicită sau protejată. Această opțiune este destinată utilizării pentru fișiere executabile în care secțiunile fără referințe ar fi, în mod normal, supuse colectării deșeurilor, indiferent de vizibilitatea externă a simbolurilor conținute. Rețineți că această opțiune nu are niciun efect la legarea obiectelor partajate, deoarece acesta este deja comportamentul implicit. Această opțiune este acceptată numai pentru ținte în format ELF.
- --print-output-format
- Afișează numele formatului de ieșire implicit (care poate fi influențat de alte opțiuni ale liniei de comandă). Acesta este șirul care ar apărea într-o comandă de tipul "OUTPUT_FORMAT" din scriptul editorului de legături.
- --print-memory-usage
- Afișează dimensiunea utilizată, dimensiunea
totală și dimensiunea utilizată a regiunilor de
memorie create cu comanda MEMORY. Această funcție
este utilă pe platformele încorporate pentru a obține
o imagine rapidă asupra cantității de memorie
liberă. Formatul de ieșire conține un titlu și
o linie pentru fiecare regiune. Este ușor de citit atât de
către utilizator, cât și de analizat de către
instrumente. Iată un exemplu de ieșire:
Regiunea de memorie Dim. utilizată Dim. regiune Utiliz. % ROM: 256 KB 1 MB 25.00% RAM: 32 B 2 GB 0.00%Notă: dacă doriți să aflați informații despre utilizarea memoriei de către editorul de legături, puteți folosi opțiunea --stats.
- --help
- Afișează un rezumat al opțiunilor liniei de comandă la ieșirea standard și apoi iese.
- --target-help
- Afișează un rezumat al tuturor opțiunilor specifice țintei la ieșirea standard și apoi iese.
- -Map=fișier-hartă
- Imprimă o hartă de legături către
fișierul fișier-hartă. Consultați
descrierea opțiunii -M de mai sus. Dacă
fișier-hartă este doar caracterul
„-”, atunci harta va fi
scrisă la ieșirea standard.
Specificarea unui director ca fișier-hartă determină scrierea hărții de legături ca fișier în interiorul acelui director. În mod normal, numele fișierului din director este calculat ca numele de bază al fișierului de ieșire, la care se adaugă ".map". Dacă, totuși, se utilizează caracterul special "%", acesta va fi înlocuit cu ruta completă a fișierului de ieșire. În plus, dacă există caractere după simbolul %, atunci ".map" nu va mai fi adăugat.
-o foo.exe -Map=bar [Creează ./bar] -o ../dir/foo.exe -Map=bar [Creează ./bar] -o foo.exe -Map=../dir [Creează ../dir/foo.exe.map] -o ../dir2/foo.exe -Map=../dir [Creează ../dir/foo.exe.map] -o foo.exe -Map=% [Creează ./foo.exe.map] -o ../dir/foo.exe -Map=% [Creează ../dir/foo.exe.map] -o foo.exe -Map=%.bar [Creează ./foo.exe.bar] -o ../dir/foo.exe -Map=%.bar [Creează ../dir/foo.exe.bar] -o ../dir2/foo.exe -Map=../dir/% [Creează ../dir/../dir2/foo.exe.map] -o ../dir2/foo.exe -Map=../dir/%.bar [Creează ../dir/../dir2/foo.exe.bar]Este o eroare dacă se specifică mai mult de un caracter „%”.
Dacă fișierul-hartă există deja, acesta va fi suprascris în urma acestei operații.
- --no-keep-memory
- ld optimizează în mod normal viteza în detrimentul utilizării memoriei, stocând în cache tabelele de simboluri ale fișierelor de intrare. Această opțiune îi indică programului ld să optimizeze în schimb utilizarea memoriei, recitind tabelele de simboluri ori de câte ori este necesar. Acest lucru poate fi necesar dacă programul ld rămâne fără spațiu de memorie în timpul legării unui executabil de dimensiuni mari.
- --no-undefined
- -z defs
- Raportează referințele la simboluri nerezolvate din
fișierele obiect obișnuite. Această operație
are loc chiar și în cazul în care editorul de
legături creează o bibliotecă partajată
nesimbolică. Opțiunea --[no-]allow-shlib-undefined
controlează comportamentul privind raportarea referințelor
nerezolvate găsite în bibliotecile partajate care sunt
incluse prin legare.
Efectele acestei opțiuni pot fi inversate folosind "-z undefs").
- --allow-multiple-definition
- -z muldefs
- În mod normal, atunci când un simbol este definit de mai multe ori, editorul de legături va raporta o eroare fatală. Aceste opțiuni permit definiții multiple, iar prima definiție va fi utilizată.
- --allow-shlib-undefined
- --no-allow-shlib-undefined
- Permite sau nu permite simboluri nedefinite în bibliotecile
partajate. Această opțiune este similară cu
--no-undefined, cu excepția faptului că
determină comportamentul în cazul în care simbolurile
nedefinite se află într-o bibliotecă partajată
și nu într-un fișier obiect obișnuit. Nu
afectează modul în care sunt tratate simbolurile nedefinite
din fișierele de obiecte obișnuite.
Comportamentul implicit este acela de a semnala erori pentru orice simbol nedefinit la care se face referire în bibliotecile partajate, în cazul în care editorul de legături este utilizat pentru a crea un executabil, dar de a le permite în cazul în care editorul de legături este utilizat pentru a crea o bibliotecă partajată.
Motivele pentru care se permit referințele la simboluri nedefinite în bibliotecile partajate specificate în momentul legării sunt următoarele:
- Este posibil ca o bibliotecă partajată specificată în momentul vinculării să nu fie aceeași cu cea care este disponibilă în momentul încărcării, astfel încât simbolul ar putea fi de fapt rezolvabil în momentul încărcării.
- Există unele sisteme de operare, cum ar fi BeOS și HPPA,
în care prezența simbolurilor nedefinite în
bibliotecile partajate este ceva normal.
De exemplu, nucleul BeOS aplică patch-uri bibliotecilor partajate în momentul încărcării, pentru a selecta funcția cea mai potrivită pentru arhitectura curentă. Această tehnică este utilizată, de exemplu, pentru a selecta dinamic o funcție memset adecvată.
- --error-handling-script=nume-script
- Dacă se specifică această opțiune, atunci
editorul de legături va apela snume-script de fiecare
dată când se întâlnește o eroare.
În prezent, însă, sunt acceptate doar două
tipuri de erori: simboluri lipsă și biblioteci lipsă.
Scriptului îi vor fi transmise două argumente:
cuvântul-cheie „undefined-symbol” sau
„missing-lib” și nume-le simbolului nedefinit
sau al bibliotecii lipsă. Scopul este ca scriptul să ofere
utilizatorului sugestii cu privire la locul în care ar putea fi
găsit simbolul sau biblioteca. După finalizarea
executării scriptului, va fi afișat mesajul obișnuit
de eroare al editorului de legături.
Disponibilitatea acestei opțiuni este controlată de un comutator de configurare a timpului, astfel încât este posibil să nu fie prezentă în anumite implementări.
- --no-undefined-version
- În mod normal, atunci când un simbol are o versiune nedefinită, editorul de legături îl va ignora. Această opțiune nu permite simbolurile cu versiune nedefinită și, în schimb, va fi emisă o eroare fatală.
- --default-symver
- Creează și utilizează o versiune implicită a simbolului (soname) pentru simbolurile exportate fără versiune.
- --default-imported-symver
- Creează și utilizează o versiune implicită a simbolului (soname) pentru simbolurile importate fără versiune.
- --no-warn-mismatch
- În mod normal, ld va genera o eroare dacă încercați să legați între ele fișiere de intrare care nu sunt compatibile din diverse motive, poate pentru că au fost compilate pentru procesoare diferite sau pentru ordinea de octeți diferită. Această opțiune indică programului ld să permită în tăcere astfel de posibile erori. Această opțiune trebuie utilizată cu prudență, numai în cazurile în care ați întreprins anumite acțiuni speciale care garantează că erorile generatoare de legare sunt nejustificate.
- --no-warn-search-mismatch
- În mod normal, ld va da un avertisment dacă găsește o bibliotecă incompatibilă în timpul căutării bibliotecii. Această opțiune silențiază avertismentul.
- --no-whole-archive
- Dezactivează efectul opțiunii --whole-archive pentru fișierele de arhivă ulterioare. Nu este permisă în cadrul unei perechi de opțiuni --start-lib/--end-lib.
- --no-link-mapless
- Respinge arhivele care nu conțin un index (cunoscut și sub denumirea de „hartă a simbolurilor”) pentru toate arhivele ulterioare menționate în linia de comandă. Dacă se întâlnește un astfel de fișier, apare o eroare de legătură. Acesta este comportamentul tradițional.
- --noinhibit-exec
- Păstrează fișierul executabil de ieșire atâta timp cât acesta este încă utilizabil. În mod normal, editorul de legături nu va genera un fișier de ieșire dacă întâmpină erori în timpul procesului de legare; acesta se închide fără a scrie un fișier de ieșire atunci când generează orice fel de eroare.
- -nostdlib
- Caută numai în directoarele de biblioteci specificate în mod explicit în linia de comandă. Directoarele de biblioteci specificate în scripturile editorului de legături (inclusiv cele specificate în linia de comandă) sunt ignorate.
- --oformat=format-ieșire
- ld poate fi configurat să accepte mai multe tipuri de fișiere obiect. Dacă ld-ul dvs. este configurat astfel, puteți folosi opțiunea --oformat pentru a specifica formatul binar al fișierului obiect de ieșire. Chiar și atunci când ld este configurat să accepte formate de obiect alternative, de obicei nu este necesar să specificați acest lucru, deoarece ld ar trebui să fie configurat să genereze ca format de ieșire implicit cel mai uzual format pe fiecare mașină. format-ieșire este un șir de text, numele unui format specific acceptat de bibliotecile BFD; puteți afișa lista formatelor binare disponibile cu objdump -i). Comanda de script "OUTPUT_FORMAT" poate, de asemenea, să specifice formatul de ieșire, dar această opțiune o suprascrie.
- --out-implib fișier
- Creează o bibliotecă de import în fișier corespunzătoare executabilului generat de editorul de legături (de exemplu, un program DLL sau ELF). Această bibliotecă de import (care ar trebui să se numească "*.dll.a" sau "*.a" pentru DLL-uri) poate fi utilizată pentru vincularea clienților cu executabilul generat; acest comportament face posibilă omiterea unei etape separate de creare a bibliotecii de import (de exemplu, "dlltool" pentru DLL-uri). Această opțiune este disponibilă numai pentru adaptările vizate PE și ELF ale editorului de legături.
- -pie
- --pic-executable
- Creează un executabil independent de poziție. Acest lucru este acceptat în prezent numai pe platformele ELF. Executabilele independente de poziție sunt realocate de către editorul de legături dinamice la adresa virtuală aleasă de sistemul de operare pentru acestea, care poate varia de la o invocare la alta. Ele sunt marcate ET_DYN în antetul fișierului ELF, dar diferă de bibliotecile partajate în mai multe moduri. În special, simbolurile definite în mod implicit într-un PIE nu pot fi înlocuite de un alt obiect, așa cum se poate întâmpla într-o bibliotecă partajată.
- -no-pie
- Creează un executabil dependent de poziție. Aceasta este opțiunea implicită.
- -qmagic
- Această opțiune este ignorată pentru compatibilitate cu Linux.
- -Qy
- Această opțiune este ignorată pentru compatibilitate cu SVR4.
- --relax
- --no-relax
- O opțiune cu efecte dependente de mașină.
Această opțiune este suportată doar pe câteva
obiective-țintă.
Pe unele platforme, opțiunea --relax efectuează optimizări globale specifice țintei, care devin posibile atunci când editorul de legături rezolvă adresarea în program, cum ar fi relaxarea modurilor de adresare, sintetizarea de instrucțiuni noi, selectarea unor versiuni mai scurte ale instrucțiunilor curente și combinarea valorilor constante.
Pe anumite platforme, aceste optimizări globale efectuate în timpul legării pot face imposibilă depanarea simbolică a executabilului rezultat. Se știe că acest lucru este valabil în cazul familiilor de procesoare Matsushita MN10200 și MN10300.
Pe platformele care acceptă această caracteristică, opțiunea --no-relax o va dezactiva.
Pe platformele care nu acceptă această caracteristică, atât --relax, cât și --no-relax sunt acceptate, dar ignorate.
- --retain-symbols-file=nume-fișier
- Păstrează doar simbolurile enumerate în
fișierul nume-fișier, eliminând toate
celelalte. nume-fișier este pur și simplu un
fișier plat, cu un singur nume de simbol pe rând.
Această opțiune este deosebit de utilă în
medii (cum ar fi VxWorks) în care se acumulează treptat o
tabelă globală de simboluri de mari dimensiuni, pentru a
economisi memoria în timpul rulării.
--retain-symbols-file nu elimină simbolurile nedefinite sau simbolurile necesare pentru realocări.
Puteți specifica --retain-symbols-file doar o singură dată în linia de comandă. Aceasta prevalează asupra lui -s și -S.
- -rpath=director
- Adaugă un director la ruta de căutare a bibliotecii de
execuție. Acest lucru este utilizat atunci când se
leagă un executabil ELF cu obiecte partajate. Toate argumentele
-rpath sunt concatenate și transmise editorului de
legături în timp de execuție, care le
utilizează pentru a localiza obiectele partajate în timpul
execuției.
Opțiunea -rpath este utilizată și pentru localizarea obiectelor partajate necesare obiectelor partajate incluse în mod explicit în legătură; consultați descrierea opțiunii -rpath-link. Căutarea -rpath în acest mod este acceptată doar de editoarele de legături native și de cele multiplatformă care au fost configurate cu opțiunea --with-sysroot.
Dacă opțiunea -rpath nu este utilizată la legarea unui executabil ELF, se va folosi conținutul variabilei de mediu "LD_RUN_PATH", dacă aceasta este definită.
Opțiunea -rpath poate fi utilizată și pe SunOS. În mod implicit, pe SunOS, editorul de legături va forma o rută de căutare la rulare pe baza tuturor opțiunilor -L care i se furnizează. Dacă se utilizează o opțiune -rpath, ruta de căutare la rulare va fi formată exclusiv folosind opțiunile -rpath, ignorând opțiunile -L. Acest lucru poate fi util atunci când se utilizează gcc, care adaugă multe opțiuni -L care pot fi pe sisteme de fișiere montate prin NFS.
Pentru compatibilitate cu alți editori de legături ELF, dacă opțiunea -R este urmată de un nume de director, în loc de un nume de fișier, aceasta este tratată ca opțiunea -rpath.
- -rpath-link=director
- Atunci când se utilizează 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ă printre fișierele de
intrare.
Atunci când editorul de legături întâlnește o astfel de dependență în timpul realizării unei legături nepartajate și nerealocabile, acesta va încerca automat să localizeze biblioteca partajată necesară și să o includă în legătură, dacă aceasta nu este inclusă în mod explicit. În acest caz, sunt căutate mai multe directoare, așa cum se descrie mai jos. Opțiunea -rpath-link specifică primul set de directoare care urmează să fie căutate. Această opțiune poate specifica o secvență de nume de directoare fie prin furnizarea unei liste de nume separate prin două puncte, fie prin repetarea opțiunii de mai multe ori.
Simbolurile $ORIGIN și $LIB pot apărea în aceste directoare de căutare. Acestea vor fi înlocuite cu ruta completă către directorul care conține programul sau obiectul partajat în cazul lui $ORIGIN și fie cu lib — pentru fișierele binare pe 32 de biți — fie cu lib64 — pentru fișierele binare pe 64 de biți — în cazul lui $LIB.
Forma alternativă a acestor jetoane - ${ORIGIN} și ${LIB} - poate fi, de asemenea, utilizată. Jetoanele $PLATFORM nu sunt acceptate.
Opțiunea --rpath-link trebuie utilizată cu precauție, deoarece aceasta suprascrie ruta de căutare care ar fi putut fi compilată static într-o bibliotecă partajată. Într-un astfel de caz, este posibil să se utilizeze în mod neintenționat o rută de căutare diferită de cea pe care ar fi folosit-o editorul de legături la rulare.
Atunci când sunt necesare biblioteci partajate suplimentare, editorul de legături va căuta în directoare, în ordinea prezentată mai jos, pentru a le găsi. Rețineți însă că acest lucru se aplică doar bibliotecilor suplimentare necesare pentru a satisface cerințele bibliotecilor partajate deja incluse. Nu se aplică bibliotecilor incluse prin opțiunea de linie de comandă -l. Căutările pentru bibliotecile -l se efectuează numai în directoarele specificate de opțiunea -L.
- 1.
- Orice directoare specificate prin opțiunile -rpath-link.
- 2.
- Orice directoare specificate prin opțiunile -rpath. Diferența dintre -rpath și -rpath-link constă în faptul că directoarele specificate prin opțiunile -rpath sunt incluse în executabil și utilizate în timpul execuției, în timp ce opțiunea -rpath-link este eficientă numai în timpul vinculării. Căutarea -rpath în acest mod este acceptată numai de către editorii de legături nativi și de editorii de legături încrucișate care au fost configurați cu opțiunea --with-sysroot.
- 3.
- Pe un sistem ELF, în cazul editorilor de legături nativi, dacă opțiunile -rpath și -rpath-link nu au fost utilizate, se caută în conținutul variabilei de mediu "LD_RUN_PATH".
- 4.
- Pe SunOS, dacă nu a fost utilizată opțiunea -rpath, se caută în toate directoarele specificate cu ajutorul opțiunilor -L.
- 5.
- Pentru un editor de legături nativ, caută conținutul variabilei de mediu "LD_LIBRARY_PATH".
- 6.
- Pentru un editor de legături ELF nativ, directoarele din "DT_RUNPATH" sau "DT_RPATH" ale unei biblioteci partajate sunt căutate pentru bibliotecile partajate necesare acesteia. Intrările "DT_RPATH" sunt ignorate dacă există intrări "DT_RUNPATH".
- 7.
- Pentru un editor de legături pentru un sistem Linux, dacă fișierul /etc/ld.so.conf există, listează directoarele găsite în acel fișier. Notă: ruta către acest fișier este prefixată cu valoarea "sysroot", dacă aceasta este definită, și apoi cu orice șir "prefix", dacă editorul de legături a fost configurat cu opțiunea --prefix=<ruta>.
- 8.
- Pentru un editor de legături nativ pe un sistem FreeBSD, orice directoare specificate de macrocomanda "_PATH_ELF_HINTS" definită în fișierul antet elf-hints.h.
- 9.
- Orice directoare specificate de o comandă "SEARCH_DIR" într-un script de editare de legături dat în linia de comandă, inclusiv scripturile specificate de -T (dar nu și de -dT).
- 10.
- Directoarele implicite, în mod normal /lib și /usr/lib.
- 11.
- Orice directoare specificate de un modul LDPT_SET_EXTRA_LIBRARY_PATH.
- 12.
- Orice directoare specificate de o comandă "SEARCH_DIR" într-un script de editare de legături implicit.
Rețineți însă că, pe sistemele bazate pe Linux, există o precizare suplimentară: dacă opțiunea --as-needed este activă și se găsește o bibliotecă partajată care, în mod normal, ar satisface condițiile de căutare și această bibliotecă nu are eticheta DT_NEEDED pentru libc.so și există o bibliotecă partajată mai târziu în setul de directoare de căutare care satisface, de asemenea, căutarea și această a doua bibliotecă partajată are o etichetă DT_NEEDED pentru libc.so atunci a doua bibliotecă va fi selectată în locul primei.
Dacă biblioteca partajată necesară nu este găsită, editorul de legături va emite un avertisment și va continua procesul de legare.
- --section-ordering-file=nume-script
- Această opțiune este utilizată pentru a completa
scriptul curent al editorului de legături cu o cartografiere
suplimentară a secțiunilor de intrare către
secțiunile de ieșire. Acest fișier trebuie să
utilizeze aceeași sintaxă pentru
"SECTIONS" ca cea folosită
în scripturile normale ale editorului de legături, dar nu
trebuie să efectueze nicio altă operație în
afară de plasarea secțiunilor de intrare în
secțiunile de ieșire.
@pxref{SECTIONS}
O a doua constrângere asupra scriptului de ordonare a secțiunilor este că acesta poate face referire numai la secțiunile de ieșire care sunt deja definite de scriptul editorului de legături utilizat în prezent; (de exemplu, scriptul editorului de legături implicit sau un script specificat în linia de comandă). Cu toate acestea, avantajul scriptului de ordonare a secțiunilor este că secțiunile de intrare sunt puse la începutul secțiunilor de ieșire, astfel încât să poată asigura ordonarea secțiunilor în secțiunea de ieșire. De exemplu, imaginați-vă că scriptul editorului de legături implicit arată astfel:
SECTIONS { .text : { *(.text.hot) ; *(.text .text.*) } .data : { *(.data.big) ; *(.data .data.*) } }Atunci, dacă se utilizează un fișier de ordonare a secțiunilor precum acesta:
.text : { *(.text.first) ; *(.text.z*) } .data : { foo.o(.data.first) ; *(.data.small) }Acesta ar echivala cu un script de editor de legături precum acesta:
SECTIONS { .text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) } .data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) } }Avantajul fișierului de ordonare a secțiunilor este că poate fi folosit pentru a ordona secțiunile care prezintă interes pentru utilizator, fără a fi nevoie să se țină cont de alte secțiuni, de regiuni de memorie sau de orice alt aspect.
- Creează o bibliotecă partajată. Acest lucru este acceptat în prezent numai pe platformele ELF, XCOFF și SunOS. Pe SunOS, editorul va crea automat o bibliotecă partajată dacă opțiunea -e nu este utilizată și există simboluri nedefinite în legătură.
- --sort-common
- --sort-common=ascending
- --sort-common=descending
- Această opțiune îi indică programului ld să sorteze simbolurile comune în funcție de aliniere, în ordine crescătoare sau descrescătoare, atunci când le plasează în secțiunile corespunzătoare ale ieșirii. Aliniamentele de simboluri luate în considerare sunt cele de șaisprezece octeți sau mai mari, de opt octeți, de patru octeți, de doi octeți și de un octet. Acest lucru are scopul de a preveni apariția unor spații între simboluri din cauza constrângerilor de aliniere. Dacă nu se specifică nicio ordine de sortare, se presupune ordinea descrescătoare.
- --sort-section=nume
- Această opțiune va aplica "SORT_BY_NAME" tuturor modelelor de secțiuni cu caractere joker din scriptul editorului de legături.
- --sort-section=alinierea
- Această opțiune va aplica "SORT_BY_ALIGNMENT" tuturor modelelor de secțiuni cu caractere joker din scriptul editorului de legături.
- --spare-dynamic-tags=număr
- Această opțiune specifică numărul de sloturi goale care trebuie lăsate în secțiunea .dynamic a obiectelor partajate ELF. Sloturile goale pot fi necesare pentru instrumentele de post-procesare, cum ar fi pre-editorul de legături. Valoarea implicită este 5.
- --split-by-file[=dimensiunea]
- Similară cu --split-by-reloc, dar creează o nouă secțiune de ieșire pentru fiecare fișier de intrare atunci când se atinge valoarea dimensiunea. Dacă nu este specificată, valoarea implicită pentru dimensiunea este 1.
- --split-by-reloc[=număr]
- Încearcă să creeze secțiuni suplimentare în fișierul de ieșire, astfel încât nicio secțiune din fișier să nu conțină mai mult de număr realocări. Această opțiune este utilă atunci când se generează fișiere realocabile de dimensiuni foarte mari, destinate descărcării în anumite nuclee de sistem în timp real care utilizează formatul de fișier obiect COFF; întrucât COFF nu poate reprezenta mai mult de 65535 de realocări într-o singură secțiune. Rețineți că această opțiune nu va funcționa cu formatele de fișiere obiect care nu acceptă secțiuni arbitrare. Editorul de legături nu va împărți secțiunile individuale de intrare pentru redistribuire, astfel încât, dacă o singură secțiune de intrare conține mai mult de număr realocări, o singură secțiune de ieșire va conține acel număr de realocări. Valoarea implicită pentru număr este 32768.
- --stats[=nume-fișier]
- Calculează și afișează statistici despre
funcționarea editorului de legături, cum ar fi timpul de
execuție și utilizarea memoriei.
Dacă argumentul opțional nume-fișier nu este specificat, atunci sunt raportate doar informațiile de bază, care sunt trimise către ieșirea de eroare standard. Dacă argumentul nume-fișier este specificat, atunci informațiile detaliate sunt scrise în fișierul menționat. Dacă nume-fișier este definit doar cu simbolul -, atunci informațiile detaliate sunt trimise către fluxul standard de ieșire. Dacă nume-fișier începe cu +, atunci fișierul este deschis în modul de adăugare, nu în modul de suprascriere.
Dacă opțiunea -Map a fost activată, informațiile sunt înregistrate și în fișierul de hartă. Notă: dacă atât opțiunea --stats, cât și opțiunea -Map au primit argumente de tipul nume-fișier și acestea coincid, informațiile vor fi scrise o singură dată, nu de două ori.
Dacă variabila de mediu "LD_STATS" este definită, atunci aceasta se comportă ca opțiunea --stats. Dacă valoarea variabilei este un șir de caractere, acesta va fi folosit ca nume al fișierului în care trebuie înregistrate informațiile. În caz contrar, informațiile vor fi trimise către fluxul de ieșire standard. Utilizarea variabilei de mediu permite înregistrarea statisticilor fără a fi necesară modificarea liniei de comandă a editorului de legături. Notă: dacă se utilizează atât variabila de mediu, cât și opțiunea --stats, atunci opțiunea --stats are prioritate.
Informațiile detaliate raportate includ timpul de procesare utilizat și, dacă apelul de bibliotecă de sistem getrusage() este disponibil, atunci și dimensiunea maximă definită, precum și timpii de execuție ai utilizatorului și ai sistemului. În plus, dacă apelurile de bibliotecă de sistem mallinfo sau mallinfo2 sunt disponibile, atunci se raportează și utilizarea totală a memoriei,
Informațiile sunt afișate pentru fiecare etapă a procesului de legare, denumite faze phases. Trebuie reținut faptul că fazele individuale se pot suprapune între ele, prin urmare nu trebuie să se presupună că resursele totale utilizate de editorul de legături sunt egale cu suma resurselor utilizate de fiecare fază în parte.
În plus, informațiile sunt prezentate și pentru o fază specială denumită ALL, care acoperă întregul proces de legare.
Atunci când se raportează informații detaliate, sunt incluse și versiunea editoului de legături, argumentele liniei de comandă și ora de pornire a acestuia. Acest lucru facilitează gestionarea situațiilor în care un sistem de compilare invocă mai multe operații de legare și identificarea exactă a argumentelor care au generat statisticile raportate.
Ieșirea extinsă arată cam așa:
Stats: linker version: (GNU Binutils) 2.44.50.20250401 Stats: linker started: Wed Apr 2 09:36:41 2025 Stats: args: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...] Stats: phase cpu time rss user time system time memory Stats: name (microsec) (KiB) (seconds) (seconds) (KiB) Stats: ALL 390082 217740 0 0 25219440 Stats: ctf processing 12 0 0 0 0 Stats: string merge 1324 0 0 0 406544 Stats: parsing 349 288 0 0 119792 Stats: plugins 1 0 0 0 0 Stats: processing files 259616 214524 0 0 31569120 Stats: write 116493 0 0 0 48096 - --no-stats
- Dezactivează raportarea statisticilor de utilizare, în cazul în care aceasta a fost activată prin opțiunea de linie de comandă --stats sau prin variabila de mediu LD_STATS.
- --sysroot=director
- Utilizează director ca locație pentru sysroot, suprascriind valoarea implicită stabilită în timpul configurării. Această opțiune este acceptată doar de editorii de legături care au fost configurați folosind opțiunea --with-sysroot.
- --task-link
- Această opțiune este utilizată de țintele bazate pe COFF/PE pentru a crea un fișier obiect legat de sarcină în care toate simbolurile globale au fost convertite în simboluri statice.
- --traditional-format
- Pentru unele ținte, rezultatul ld este diferit în
anumite moduri de rezultatul unui editor de legături existent.
Această opțiune solicită ld să
utilizeze în schimb formatul tradițional.
De exemplu, pe SunOS, ld combină intrările duplicate din tabelul de șiruri de simboluri. Acest lucru poate reduce dimensiunea unui fișier de ieșire care conține informații complete de depanare cu peste 30 la sută. Din păcate, programul SunOS "dbx" nu poate citi programul rezultat ("gdb" fără nicio problemă). Opțiunea --traditional-format îi indică lui ld să nu combine intrările duplicate.
- --section-start=nume-secțiune=org
- Localizează o secțiune din 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 singur număr întreg hexazecimal; pentru compatibilitate cu alte editoare de legături, puteți omite caracterul inițial 0x asociat de obicei cu valorile hexazecimale. Notă: nu trebuie să existe spații între nume-secțiune, semnul egal („=”) și org.
- --image-base=org
- Atunci când se utilizează ELF, la fel ca în cazul
-Ttext-segment, ambele opțiuni stabilesc efectiv adresa de
bază a executabilului ELF.
Când se utilizează PE, utilizează valoarea ca adresă de bază a programului sau dll-ului. Aceasta este cea mai mică locație de memorie care va fi utilizată atunci când programul sau dll-ul dvs. este încărcat. Pentru a reduce nevoia de realocare și pentru a îmbunătăți performanța dll-urilor dvs., fiecare ar trebui să aibă o adresă de bază unică și să nu se suprapună peste alte dll-uri. Valoarea implicită este 0x400000 pentru executabile și 0x10000000 pentru dll-uri.
- -Tbss=org
- -Tdata=org
- -Ttext=org
- La fel ca --section-start, cu ".bss", ".data" sau ".text" ca nume-secțiune.
- -Ttext-segment=org
- La crearea unui executabil ELF, aceasta va stabili adresa primului octet al primului segment. Rețineți că, atunci când se utilizează -pie împreună cu -Ttext-segment=org, executabilul rezultat este marcat cu ET_EXEC, astfel încât adresa primului octet al segmentului de text să fie garantat org în timpul rulării.
- -Trodata-segment=org
- Când se creează un fișier executabil ELF sau un obiect partajat pentru o platformă țintă în care datele numai-pentru-citire se află într-un segment propriu, separat de textul executabil, aceasta va stabili adresa primului octet al segmentului de date numai-pentru-citire.
- -Tldata-segment=org
- Atunci când se creează un fișier executabil ELF sau un obiect partajat pentru modelul de memorie mediu x86-64, se va stabili adresa primului octet al segmentului ldata.
- --unresolved-symbols=metoda
- Determină modul de tratare a simbolurilor nerezolvate. Există patru valori posibile pentru metodă:
- ignore-all
- Nu raportează niciun simbol nerezolvat.
- report-all
- Raportează toate simbolurile nerezolvate. Aceasta este valoarea implicită.
- ignore-in-object-files
- Raportează simbolurile nerezolvate conținute în bibliotecile partajate, dar le ignoră dacă provin din fișiere obiect obișnuite.
- ignore-in-shared-libs
- Raportează simbolurile nerezolvate care provin din fișiere obiect obișnuite, dar le ignoră dacă provin din biblioteci partajate. Acest lucru poate fi util atunci când se creează un fișier binar dinamic și se știe că toate bibliotecile partajate la care ar trebui să facă referire sunt incluse în linia de comandă a editorului de legături.
Comportamentul bibliotecilor partajate poate fi controlat și prin opțiunea --[no-]allow-shlib-undefined.
În mod normal, editorul de legături va genera un mesaj de eroare pentru fiecare simbol nerezolvat raportat, dar opțiunea --warn-unresolved-symbols poate schimba acest lucru într-un avertisment.
- --dll-verbose
- --verbose[=NUMĂR]
- Afișează numărul versiunii pentru ld și enumeră emulările editorului de legături acceptate. Afișează fișierele de intrare care pot sau nu pot fi deschise. Afișează scriptul editor de legături utilizat de editorul de legături. Dacă argumentul opțional NUMĂR > 1, va fi afișată și starea simbolului modulului.
- --version-script=versiunea-fișier-script
- Specifică numele unui script de versiune pentru editorul de legături. Această opțiune este utilizată de obicei la crearea bibliotecilor partajate, pentru a specifica informații suplimentare despre ierarhia de versiuni a bibliotecii create. Această opțiune este acceptată pe deplin numai pe platformele ELF care acceptă biblioteci partajate; consultați VERSION. Este acceptată parțial pe platformele PE, care pot utiliza scripturi de versiune pentru a filtra vizibilitatea simbolurilor în modul de export automat: orice simboluri marcate cu local în scriptul de versiune nu vor fi exportate.
- --warn-common
- Afișează un avertisment atunci când un simbol comun
este combinat cu un alt simbol comun sau cu o definiție de simbol.
Editoarele de legături Unix permit această practică
oarecum neglijentă, dar editoarele de legături de pe unele
alte sisteme de operare nu o permit. Această opțiune
vă permite să identificați potențiale probleme
rezultate din combinarea simbolurilor globale. Din păcate, unele
biblioteci C folosesc această practică, așa că
este posibil să primiți avertismente referitoare la
simboluri atât în biblioteci, cât și în
programele dumneavoastră.
Există trei tipuri de simboluri globale, ilustrate aici prin exemple în limbajul C:
- int i = 1;
- O definiție, care se introduce în secțiunea de date inițializate a fișierului de ieșire.
- extern int i;
- O referință nedefinită, care nu alocă spațiu. Trebuie să existe undeva fie o definiție, fie un simbol comun pentru variabila respectivă.
- int i;
- Un simbol comun. În cazul în care există doar (unul sau mai multe) simboluri comune pentru o variabilă, aceasta este plasată în zona de date neinițializate din fișierul de ieșire. Editorul de legături unește mai multe simboluri comune pentru aceeași variabilă într-un singur simbol. În cazul în care acestea au dimensiuni diferite, alege cea mai mare dimensiune. Editorul de legături transformă un simbol comun într-o declarație, în cazul în care există o definiție a aceleiași variabile.
Opțiunea --warn-common poate genera cinci tipuri de avertismente. Fiecare avertisment constă dintr-o pereche de linii: prima descrie simbolul tocmai întâlnit, iar a doua descrie simbolul anterior cu același nume. Unul dintre cele două simboluri sau ambele vor fi simboluri comune.
- 1.
- Transformarea unui simbol obișnuit într-o
referință, deoarece există deja o definiție
pentru acest simbol.
<file>(<section>): avertisment: „common” din `<simbol>' este suprascris de definiție <file>(<section>): avertisment: definit aici - 2.
- Transformă un simbol obișnuit într-o
referință, deoarece se întâlnește o
definiție ulterioară a simbolului. Este același lucru
ca în cazul anterior, cu excepția faptului că
simbolurile apar într-o ordine diferită.
<file>(<section>): avertisment: definiția lui `<simbol>' suprascrie „common” <file>(<section>): avertisment: „common” apare aici - 3.
- Fuzionarea unui simbol comun cu un simbol comun anterior de aceeași
dimensiune.
<file>(<section>): avertisment: multiple „common” pentru `<simbol>' <file>(<section>): avertisment: precedentul „common” apare aici - 4.
- Fuzionarea unui simbol comun cu un simbol comun anterior, mai mare.
<file>(<section>): avertisment: simbolul comun `<symbol>' este suprascris de un simbol comun mai mare <file>(<section>): avertisment: simbol comun mai mare apare aici - 5.
- Fuzionarea unui simbol comun cu un simbol comun anterior, mai mic. Este
vorba despre același lucru ca în cazul anterior, cu
excepția faptului că simbolurile apar într-o ordine
diferită.
<file>(<section>): avertisment: simbolul comun `<symbol>' este suprascris de un simbol comun mai mic <file>(<section>): avertisment: simbol comun mai mic apare aici
- --warn-constructors
- Avertizează dacă se utilizează constructori globali. Această opțiune este utilă doar pentru câteva formate de fișiere obiect. În cazul formatelor precum COFF sau ELF, editorul de legături nu poate detecta utilizarea constructorilor globali.
- --warn-execstack
- --warn-execstack-objects
- --no-warn-execstack
- Pe platformele ELF, editorul de legături poate genera mesaje de avertizare dacă i se cere să creeze un fișier de ieșire care conține o stivă executabilă. Există trei stări posibile:
- 1.
- Nu generează niciun avertisment.
- 2.
- Generează întotdeauna avertismente, chiar dacă stiva executabilă este solicitată prin intermediul opțiunii de linie de comandă -z execstack.
- 3.
- Se generează o avertizare doar dacă un fișier obiect solicită o stivă de execuție, dar nu și dacă se utilizează opțiunea -z execstack.
Starea implicită depinde de modul în care a fost configurat editorul de legături în momentul compilării. Opțiunea --no-warn-execstack pune întotdeauna editorul de legături în starea „fără avertismente”. Opțiunea --warn-execstack pune editorul de legături în starea „avertizare permanentă”. Opțiunea --warn-execstack-objects pune editorul de legături în starea „avertizare numai pentru fișierele obiect”.
Notă: Fișierele de intrare în format ELF pot specifica faptul că au nevoie de o stivă executabilă prin prezența unei secțiuni .note.GNU-stack cu bitul de execuție activat în indicatorii secțiunii. Acestea pot specifica faptul că nu au nevoie de o stivă executabilă prin prezența aceleiași secțiuni, dar fără ca bitul de execuție să fie activat. Dacă un fișier de intrare nu conține o secțiune .note.GNU-stack, atunci comportamentul implicit depinde de țintă. Pentru unele ținte, absența unei astfel de secțiuni implică faptul că este necesară o stivă executabilă. Acest lucru reprezintă adesea o problemă pentru fișierele de asamblare create manual.
- --error-execstack
- --no-error-execstack
- Dacă editorul de legături va genera un mesaj de avertizare
referitor la stiva executabilă, opțiunea
--error-execstack va transforma acea avertizare într-o
eroare. Notă — această opțiune nu
modifică starea de generare a avertismentelor privind stiva
executabilă a editorului de legături. Utilizați
--warn-execstack sau --warn-execstack-objects pentru a
utiliza o stare specifică de avertizare.
Opțiunea --no-error-execstack va restabili comportamentul implicit de generare a mesajelor de avertizare.
- --warn-multiple-gp
- Afișează un avertisment dacă în fișierul de ieșire sunt necesare mai multe valori ale indicatorului global. Aceasta are relevanță doar pentru anumite procesoare, cum ar fi Alpha. Mai precis, unele procesoare plasează constantele cu valori mari într-o secțiune specială. Un registru special (indicatorul global) indică spre mijlocul acestei secțiuni, astfel încât constantele să poată fi încărcate eficient prin intermediul unui mod de adresare relativă la registrul de bază. Deoarece decalajul în modul relativ la registrul de bază este fix și relativ mic (de exemplu, 16 biți), acest lucru limitează dimensiunea maximă a grupului de constante. Astfel, în programele de mari dimensiuni, este adesea necesar să se utilizeze mai multe valori ale indicatorului global pentru a putea adresa toate constantele posibile. Această opțiune determină afișarea unui avertisment ori de câte ori apare această situație.
- --warn-once
- Afișează o singură avertizare pentru fiecare simbol nedefinit, în loc de câte una pentru fiecare modul care face referire la acesta.
- --warn-rwx-segments
- --no-warn-rwx-segments
- Se va afișa un avertisment dacă editorul de legături
creează un segment încărcabil, cu dimensiune
diferită de zero, pentru care sunt activate toate cele trei
fanioane de permisiuni: citire, scriere și execuție. Un
astfel de segment reprezintă o potențială
vulnerabilitate de securitate. În plus, se vor genera avertismente
dacă se creează un segment de stocare locală a
firului cu fanionul de permisiune de execuție activat, indiferent
dacă are sau nu activate fanioanele de citire și/sau
scriere.
Aceste avertismente sunt activate în mod implicit. Ele pot fi dezactivate prin opțiunea --no-warn-rwx-segments și reactivate prin opțiunea --warn-rwx-segments.
- --error-rwx-segments
- --no-error-rwx-segments
- Dacă editorul de legături urmează să genereze
un mesaj de avertizare cu privire la un segment executabil, un segment
în care se poate scrie sau un segment TLS executabil,
opțiunea --error-rwx-segments va transforma această
avertizare într-o eroare. Opțiunea
--no-error-rwx-segments va restabili comportamentul implicit,
și anume generarea doar a unui mesaj de avertizare.
Notă — opțiunea --error-rwx-segments nu activează în mod automat avertismentele referitoare la aceste segmente. Aceste avertismente sunt activate fie în mod implicit, dacă editorul de legături a fost configurat în acest sens, fie prin intermediul opțiunii de linie de comandă --warn-rwx-segments.
- --warn-section-align
- Afișează un mesaj de avertizare dacă adresa unei secțiuni de ieșire este modificată din cauza alinierii. De obicei, alinierea este stabilită de o secțiune de intrare. Adresa va fi modificată numai dacă nu este specificată în mod explicit; adică, dacă comanda "SECTIONS" nu specifică o adresă de început pentru secțiune.
- --warn-textrel
- Afișează un avertisment dacă editorul de legături adaugă DT_TEXTREL la un executabil independent de poziție sau la un obiect partajat.
- --warn-alternate-em
- Avertizează dacă un obiect are un cod mașină ELF alternativ.
- --warn-unresolved-symbols
- Dacă editorul de legături urmează să semnaleze un simbol nerezolvat (vezi opțiunea --unresolved-symbols), acesta va genera, în mod normal, o eroare. Această opțiune face ca acesta să genereze, în schimb, un avertisment.
- --error-unresolved-symbols
- Aceasta restabilește comportamentul implicit al editorului de legături, de a genera erori atunci când semnalează simboluri nerezolvate.
- --whole-archive
- Pentru fiecare arhivă menționată în linia de
comandă după opțiunea --whole-archive, se
includ în procesul de legare toate fișierele obiect din
arhivă, în loc să se caute în arhivă
fișierele obiect necesare. Această opțiune este
utilizată, de obicei, pentru a transforma un fișier de
arhivă într-o bibliotecă partajată,
forțând includerea tuturor fișierelor obiect
în biblioteca partajată rezultată. Această
opțiune poate fi utilizată de mai multe ori.
Această opțiune nu este permisă în cadrul unei perechi de opțiuni --start-lib/--end-lib.
Două precizări privind utilizarea acestei opțiuni din gcc: În primul rând, gcc nu recunoaște această opțiune, așa că trebuie să folosiți -Wl,-whole-archive. În al doilea rând, nu uitați să folosiți -Wl,-no-whole-archive după lista voastră de arhive, deoarece gcc va adăuga propria listă de arhive la legarea voastră și este posibil să nu doriți ca această opțiune să le afecteze și pe acestea.
- --link-mapless
- Acceptă arhive care nu conțin un index (cunoscut și sub denumirea de „hartă a simbolurilor”) pentru toate arhivele ulterioare menționate în linia de comandă. Dacă lipsește, un astfel de index este generat intern pe loc, cu un cost în ceea ce privește performanța. Aceasta este opțiunea implicită.
- --wrap=simbol
- Utilizează o funcție de învăluire pentru
simbol. Orice referință nedefinită la
simbol va fi rezolvată ca
"__wrap_symbol".
Orice referință nedefinită la
"__real_simbol"
va fi rezolvată ca
simbol.
Aceasta poate fi utilizată pentru a crea o funcție de învăluire pentru o funcție de sistem. Funcția de învăluire trebuie apelată astfel: "__wrap_symbol". Dacă se dorește apelarea funcției de sistem, trebuie apelată astfel: "__real_symbol".
Iată un exemplu banal:
void * __wrap_malloc (size_t c) { printf ("malloc called with %zu\n", c); return __real_malloc (c); }Dacă legați alt cod de acest fișier folosind --wrap malloc, atunci toate apelurile către "malloc" vor apela în schimb funcția "__wrap_malloc". Apelul către "__real_malloc" din "__wrap_malloc" va apela funcția reală "malloc".
Poate doriți să definiți și o funcție "__real_malloc", astfel încât legăturile fără opțiunea --wrap să se realizeze cu succes. Dacă faceți acest lucru, nu trebuie să plasați definiția "__real_malloc" în același fișier cu "__wrap_malloc"; dacă o faceți, asamblorul ar putea rezolva apelul înainte ca editorul de legături să aibă ocazia să-l înlocuiască cu "malloc".
Numai referințele nedefinite sunt înlocuite de editorul de legături. Prin urmare, referințele interne ale unității de traducere la simbol nu sunt rezolvate ca "__wrap_symbol". În exemplul următor, apelul către "f" din "g" nu este rezolvat ca "__wrap_f".
int f (void) { return 123; } int g (void) { return f(); } - --eh-frame-hdr
- --no-eh-frame-hdr
- Solicită (--eh-frame-hdr) sau suprimă (--no-eh-frame-hdr) crearea secțiunii ".eh_frame_hdr" și a antetului segmentului ELF "PT_GNU_EH_FRAME".
- --no-ld-generated-unwind-info
- Solicită generarea informațiilor de derulare ".eh_frame" pentru secțiunile de cod generate de editorul de legături, cum ar fi PLT. Această opțiune este activată implicit dacă sunt acceptate informațiile de derulare generate de editorul de legături.
- --discard-sframe
- Elimină informațiile privind urmărirea stivei ".sframe" de la ieșire. Această opțiune interzice, de asemenea, crearea datelor de urmărire a stivei SFrame pentru secțiunile de cod generate de editorul de legături, cum ar fi PLT. Această opțiune este dezactivată în mod implicit.
- --enable-new-dtags
- --disable-new-dtags
- Acest editor de legături poate crea noi etichete dinamice în format ELF. Totuși, este posibil ca sistemele ELF mai vechi să nu le recunoască. Dacă specificați --enable-new-dtags, noile etichete dinamice vor fi create după cum este necesar, iar etichetele dinamice mai vechi vor fi omise. Dacă specificați --disable-new-dtags, nu vor fi create etichete dinamice noi. În mod implicit, noile etichete dinamice nu sunt create. Rețineți că aceste opțiuni sunt disponibile numai pentru sistemele ELF.
- --hash-size=număr
- Stabilește dimensiunea implicită a tabelelor hash ale editorului de legături la un număr prim apropiat de număr. Creșterea acestei valori poate reduce timpul necesar editorului de legături pentru a-și îndeplini sarcinile, însă în detrimentul creșterii cerințelor de memorie ale acestuia. În mod similar, reducerea acestei valori poate reduce cerințele de memorie, în detrimentul vitezei. Valoarea implicită este 4051 în condiții normale și 1021 dacă se utilizează opțiunea de linie de comandă --reduce-memory-overheads.
- --hash-style=stil
- Stabilește tipul tabelului (tabelelor) hash al (ale) editorului de legături. stil poate fi, fie "sysv" pentru secțiunea clasică ELF ".hash", fie "gnu" pentru secțiunea GNU de tip nou ".gnu.hash(C' sau "both" pentru ambele tabele hash: cea clasică ELF ".hash" și cea de tip GNU nou ".gnu.hash". Valoarea implicită depinde de modul în care a fost configurat editorul de legături, dar pentru majoritatea sistemelor bazate pe Linux aceasta va fi "both".
- --compress-debug-sections=none
- --compress-debug-sections=zlib
- --compress-debug-sections=zlib-gnu
- --compress-debug-sections=zlib-gabi
- --compress-debug-sections=zstd
- Pe platformele ELF, aceste opțiuni controlează modul
în care sunt comprimate secțiunile de depanare DWARF
folosind «zlib».
--compress-debug-sections=none nu comprimă secțiunile de depanare DWARF. --compress-debug-sections=zlib-gnu comprimă secțiunile de depanare DWARF și le redenumește astfel încât să înceapă cu .zdebug în loc de .debug. --compress-debug-sections=zlib-gabi comprimă, de asemenea, secțiunile de depanare DWARF, dar, în loc să le redenumească, activează fanionul SHF_COMPRESSED în antetetele secțiunilor.
Opțiunea --compress-debug-sections=zlib este un alias pentru --compress-debug-sections=zlib-gabi.
--compress-debug-sections=zstd comprimă secțiunile de depanare DWARF folosind «zstd».
Rețineți că această opțiune anulează orice compresie din secțiunile de depanare din fișierele de intrare; astfel, dacă un fișier binar este legat cu opțiunea --compress-debug-sections=none, de exemplu, atunci orice secțiuni de depanare comprimate din fișierele de intrare vor fi decomprimate înainte de a fi copiate în fișierul binar de ieșire.
Comportamentul implicit de compresie variază în funcție de ținta respectivă și de opțiunile de configurare utilizate pentru compilarea lanțului de instrumente. Valoarea implicită poate fi determinată prin examinarea ieșirii opțiunii --help a editorului de legături.
- --reduce-memory-overheads
- Această opțiune reduce cerințele de memorie în
timpul rulării programului ld, în detrimentul vitezei de
legare. Această opțiune a fost introdusă pentru a
selecta vechiul algoritm O(n^2) pentru generarea fișierului de
hartă de legături, în locul noului algoritm O(n),
care utilizează cu aproximativ 40% mai multă memorie pentru
stocarea simbolurilor.
Un alt efect al opțiunii este de a stabili dimensiunea implicită a tabelului sumelor de control (hash) la 1021, ceea ce, din nou, economisește memorie cu prețul prelungirii timpului de execuție al editorului de legături. Totuși, acest lucru nu se întâmplă dacă s-a folosit opțiunea --hash-size.
Opțiunea --reduce-memory-overheads poate fi utilizată și pentru a activa alte compromisuri în versiunile viitoare ale editorului de legături.
- --max-cache-size=dimensiunea
- ld stochează de obicei în memorie informațiile de realocare și tabelele de simboluri ale fișierelor de intrare, fără limită de dimensiune. Această opțiune definește dimensiunea maximă a cache-ului la dimensiune. Notă — dacă s-a utilizat opțiunea de linie de comandă --no-keep-memory, atunci editorul de legături se comportă ca și cum dimensiunea maximă a cache-ului ar fi fost definită la 0 — adică nu se păstrează nimic.
- --build-id
- --build-id=stil
- Solicită crearea unei secțiuni ELF „note”
denumită ".note.gnu.build-id" sau
a unei secțiuni COFF denumită
".buildid". Conținutul
secțiunii „note” este format din biți unici
care identifică acest fișier legat. stil poate fi
"uuid" pentru a utiliza 128 de
biți aleatori; "sha1" pentru a
utiliza un hash SHA1 de 160 de biți,
"md5" pentru a utiliza un hash MD5 de
128 de biți sau "xx" pentru a
utiliza un XXHASH de 128 de biți asupra părților
normative ale conținutului de ieșire; sau
"0xhexstring"
pentru a utiliza un șir de biți ales,
specificat ca un număr par de cifre
hexazecimale (caracterele
"-"
și
":"
dintre perechile de cifre sunt ignorate).
Dacă stil este omis, se
utilizează
"sha1".
Stilurile "md5", "sha1" și "xx" generează un identificator care este întotdeauna același într-un fișier de ieșire identic, dar care este aproape sigur unic printre toate fișierele de ieșire neidentice. Acesta nu este destinat să fie comparat ca sumă de control pentru conținutul fișierului. Un fișier legat poate fi modificat ulterior de alte instrumente, dar șirul de biți al ID-ului de compilare care identifică fișierul legat original nu se modifică.
Pasarea "none" pentru stil dezactivează valoarea din orice opțiuni "--build-id" anterioare din linia de comandă.
- --package-metadata=JSON
- Solicită crearea unei secțiuni de note ELF de tip ".note.package". Conținutul notei este în format JSON, conform specificației metadatelor pachetului. Pentru mai multe informații, consultați: https://systemd.io/ELF_PACKAGE_METADATA/ Argumentul JSON acceptă codificarea procentuală și următoarele codificări %[string] (unde string se referă la numele din Referințele de caractere numite din HTML): %[comma] pentru ,, %[lbrace] pentru {, %[quot] pentru ", %[rbrace] pentru }, și %[space] pentru caracterul spațiu. Dacă argumentul JSON lipsește sau este gol, aceasta va dezactiva crearea notei de metadate, în cazul în care aceasta fusese activată printr-o apariție anterioară a opțiunii --package-metadata. Dacă editorul de legături a fost compilat cu libjansson, atunci șirul JSON va fi validat.
Editorul de legături PE acceptă opțiunea -shared, care face ca rezultatul să fie o bibliotecă legată dinamic (DLL) în loc de un executabil obișnuit. Când utilizați această opțiune, ar trebui să denumiți fișierul de ieșire "*.dll". În plus, editorul de legături oferă suport complet pentru fișierele standard "*.def", care pot fi specificate în linia de comandă a editorului de legături la fel ca un fișier obiect (de fapt, acestea ar trebui să precedă arhivele din care exportă simboluri, pentru a se asigura că acestea sunt incluse în legătură, la fel ca un fișier obiect obișnuit).
În plus față de opțiunile comune tuturor obiectivelor, editorul de legături PE acceptă opțiuni de linie de comandă suplimentare care sunt specifice obiectivului PE. Opțiunile care iau valori pot fi separate de valorile lor printr-un spațiu sau un semn egal.
- --add-stdcall-alias
- Dacă este specificată, simbolurile cu sufixul stdcall (@nn) vor fi exportate atât în forma inițială, cât și fără acest sufix. Deoarece țintele PE+ au o singură convenție de apel, simbolurile din acestea nu sunt niciodată modificate, iar această opțiune este acceptată, dar nu are niciun efect. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --base-file fișier
- Utilizează fișier ca nume al fișierului în care se salvează adresele de bază ale tuturor realocărilor necesare pentru generarea DLL-urilor cu dlltool. [Aceasta este o opțiune specifică versiunilor pentru PE al editorului de legături]
- --dll
- Creează o DLL în locul unui executabil obișnuit. De asemenea, puteți utiliza -shared sau specifica o „BIBLIOTECĂ” într-un fișier „.def” dat. [Această opțiune este specifică adaptărilor PE vizate de editorul de legături]
- --enable-long-section-names
- --disable-long-section-names
- Variantele PE ale formatului de obiect COFF adaugă o extensie care permite utilizarea unor nume de secțiuni mai lungi de opt caractere, limita normală pentru COFF. În mod implicit, aceste nume sunt permise doar în fișierele obiect, deoarece imaginile executabile complet legate nu conțin tabelul de șiruri COFF necesar pentru a suporta numele mai lungi. Ca o extensie GNU, este posibil să se permită utilizarea lor și în imaginile executabile sau să se interzică (probabil fără rost!) aceasta în fișierele obiect, folosind aceste două opțiuni. Imaginile executabile generate cu aceste nume lungi de secțiuni sunt ușor neconforme cu standardul, deoarece conțin o tabelă de șiruri, și pot genera rezultate confuze atunci când sunt examinate cu instrumente care nu sunt compatibile cu PE GNU, cum ar fi vizoarele de fișiere și programele de dump. Cu toate acestea, GDB se bazează pe utilizarea numelor lungi de secțiuni PE pentru a găsi secțiunile de informații de depanare Dwarf-2 într-o imagine executabilă în timpul rulării; astfel, dacă nu este specificată nicio opțiune în linia de comandă, ld va activa numele lungi de secțiuni, suprascriind comportamentul implicit și corect din punct de vedere tehnic, atunci când detectează prezența informațiilor de depanare în timpul legării unei imagini executabile și fără a elimina simbolurile. [Această opțiune este valabilă pentru toate adaptările editorului de legături PE]
- --enable-stdcall-fixup
- --disable-stdcall-fixup
- Dacă modulul de legare găsește un simbol pe care nu îl poate rezolva, va încerca să efectueze o „legare aproximativă” (fuzzy linking), căutând un alt simbol definit care diferă doar prin formatul numelui simbolului (cdecl vs stdcall) și va rezolva acel simbol prin legarea la simbolul corespunzător. De exemplu, simbolul nedefinit "_foo" ar putea fi legat la funcția "_foo@12", sau simbolul nedefinit "_bar@16" ar putea fi legat la funcția "_bar". Când editorul de legături face acest lucru, afișează un avertisment, deoarece, în mod normal, ar fi trebuit să eșueze legarea, dar uneori bibliotecile de import generate din DLL-uri de la terți pot avea nevoie de această caracteristică pentru a fi utilizabile. Dacă specificați --enable-stdcall-fixup, această caracteristică este complet activată și nu se afișează avertismente. Dacă specificați --disable-stdcall-fixup, această caracteristică este dezactivată, iar astfel de neconcordanțe sunt considerate erori. Deoarece țintele PE+ au o singură convenție de apel, simbolurile de acolo nu sunt niciodată decorate, iar aceste opțiuni sunt acceptate, dar nu au niciun efect. [Această opțiune este specifică adaptării i386 PE a editorului de legături]
- --leading-underscore
- --no-leading-underscore
- Pentru majoritatea țintelor, prefixul implicit al simbolului este o liniuță de subliniere și este definit în descrierea țintei. Prin această opțiune este posibil să dezactivați/activați prefixul implicit al simbolului, reprezentat de o liniuță de subliniere.
- --export-all-symbols
- Dacă este specificată, toate simbolurile globale din obiectele utilizate pentru compilarea unei DLL vor fi exportate de către DLL. Rețineți că aceasta este opțiunea implicită în cazul în care altfel nu ar exista simboluri exportate. Atunci când simbolurile sunt exportate în mod explicit prin fișiere DEF sau în mod implicit prin atributele funcțiilor, opțiunea implicită este de a nu exporta nimic altceva, cu excepția cazului în care această opțiune este specificată. Rețineți că simbolurile "DllMain@12", "DllEntryPoint@0", "DllMainCRTStartup@12" și "impure_ptr" nu vor fi exportate automat. De asemenea, simbolurile importate din alte DLL-uri nu vor fi reexportate, la fel cum nu vor fi reexportate nici simbolurile care specifică structura internă a DLL-ului, cum ar fi cele care încep cu "_head_" sau se termină cu "_iname". În plus, nu vor fi exportate simboluri din "libgcc", "libstd++", "libmingw32" sau "crtX.o". Simbolurile ale căror nume încep cu "__rtti_" sau "__builtin_" nu vor fi exportate, pentru a facilita lucrul cu DLL-urile C++. În cele din urmă, există o listă extinsă de simboluri private Cygwin care nu sunt exportate (evident, acest lucru se aplică doar atunci când se compilează DLL-uri pentru ținte Cygwin). Aceste simboluri excluse de Cygwin sunt: "_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", și "environ". [Această opțiune este specifică adaptării i386 PE a editorului de legături]
- --exclude-symbols simbol,simbol,...
- Specifică o listă de simboluri care nu trebuie exportate automat. Numele simbolurilor pot fi separate prin virgule sau două puncte. [Această opțiune este specifică versiunilor pentru ținta PE a editorului de legături]
- --exclude-all-symbols
- Specifică faptul că niciun simbol nu trebuie exportat automat. [Această opțiune este specifică versiuniilor pentru ținta iPE a editorului de legături]
- --file-alignment
- Specificați alinierea fișierului. Secțiunile din fișier vor începe întotdeauna la poziții din fișier care sunt multipli ai acestui număr. Valoarea implicită este 512. [Această opțiune este specifică versiunilor pentru ținta PE a editorului de legături]
- --heap rezerva
- --heap rezerva,angajată
- Specifică numărul de octeți de memorie care trebuie rezervați (și, opțional, alocați definitiv) pentru a fi folosiți ca grămadă „heap” pentru acest program. Valoarea implicită este de 1 Mo rezervat și 4 Ko alocat definitiv. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --kill-at
- Dacă este specificată, sufixele stdcall (@nn) vor fi eliminate din simboluri înainte ca acestea să fie exportate. Deoarece țintele PE+ au o singură convenție de apel, simbolurile din acestea nu sunt niciodată modificate, iar această opțiune este acceptată, dar nu are niciun efect. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --large-address-aware
- Dacă este specificată, bitul corespunzător din câmpul „Characteristics” al antetului COFF este configurat pentru a indica faptul că acest executabil acceptă adrese virtuale mai mari de 2 gigaocteți. Această opțiune trebuie utilizată împreună cu opțiunea /3GB sau /USERVA=valoare megaocteți din secțiunea „[operating systems]” a fișierului BOOT.INI. În caz contrar, acest bit nu are niciun efect. [Această opțiune este specifică versiunii editorului de legături destinat pentru i386 PE]
- --disable-large-address-aware
- Anulează efectul unei opțiuni anterioare --large-address-aware. Această opțiune este utilă în cazul în care --large-address-aware este întotdeauna definită de controlorul compilatorului (de exemplu, gcc din Cygwin), iar executabilul nu acceptă adrese virtuale mai mari de 2 gigaocteți. [Această opțiune este specifică versiunii editorului de legături destinat pentru i386 PE]
- --major-image-version valoare
- Stabilește numărul major al „versiunii imaginii”. Valoarea implicită este 1. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --major-os-version valoare
- Stabilește numărul major al „versiunii sistemului de operare”. Valoarea implicită este 4. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --major-subsystem-version valoare
- Stabilește numărul major al „versiunii subsistemului”. Valoarea implicită este 4. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --minor-image-version valoare
- Stabilește numărul minor al „versiunii imaginii”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --minor-os-version valoare
- Stabilește numărul minor al „versiunii sistemului de operare”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturlor PE]
- --minor-subsystem-version valoare
- Stabilește numărul minor al „versiunii subsistemului”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturilor PE]
- --output-def fișier
- Editorul de legături va crea fișierul fișier, care va conține un fișier DEF corespunzător DLL-ului pe care îl generează. Acest fișier DEF (care ar trebui să se numească "*.def") poate fi utilizat pentru a crea o bibliotecă de import cu "dlltool" sau poate fi folosit ca referință pentru simbolurile exportate automat sau implicit.. [Această opțiune este specifică versiunii editorului de legături destinat pentru formatul PE]
- --enable-auto-image-base
- --enable-auto-image-base=valoare
- Alege automat baza de imagine pentru DLL-uri, opțional începând cu baza valoare, cu excepția cazului în care este specificată una folosind argumentul "--image-base". Prin utilizarea unei sume de control (hash) generată din nume-dll pentru a crea baze de imagini unice pentru fiecare DLL, sunt evitate coliziunile și realocările în memorie care pot întârzia executarea programului. [Această opțiune este specifică versiunii editorului de legături destinat pentru PE]
- --disable-auto-image-base
- Nu generează automat o bază de imagine unică. Dacă nu există o bază de imagine specificată de utilizator („--image-base”), atunci utilizează valoarea implicită a platformei. [Această opțiune este specifică versiunilor PE ale editorului de legături]
- --dll-search-prefix șir
- Atunci când se realizează o legătură dinamică către o dll fără o bibliotecă de import, caută "<string><basename>.dll" în locul lui "lib<basename>.dll". Acest comportament permite distingerea ușoară între DLL-urile compilate pentru diverse „subplatforme”: native, cygwin, uwin, pw etc. De exemplu, DLL-urile cygwin utilizează de obicei "--dll-search-prefix=cyg". [Această opțiune este specifică versiunii editorului de legături pentru formatul PE]
- --enable-auto-import
- Nu încearcă să facă legarea sofisticată
a „_symbol” la
„__imp__symbol” pentru importurile
de DATE din DLL-uri. [Această opțiune este specifică
versiunilor PE ale editorului de legături]
Următoarele observații se referă la implementarea inițială a funcționalității și sunt în prezent depășite pentru țintele Cygwin și MinGW.
Notă: Utilizarea extensiei „auto-import” va face ca secțiunea de text a fișierului imagine să devină modificabilă. Acest lucru nu respectă specificațiile formatului PE-COFF publicate de Microsoft.
Notă – utilizarea extensiei 'auto-import' va determina, de asemenea, ca datele de tip „doar citire”, care în mod normal ar fi plasate în secțiunea .rdata, să fie plasate în schimb în secțiunea .data. Acest lucru are scopul de a rezolva o problemă cu constantele descrisă aici: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
În general, utilizarea opțiunii de „import automat”, va „funcționa” – dar uneori s-ar putea să primiți acest mesaj:
"variabila «<var>» nu poate fi importată automat. Pentru detalii, consultați documentația referitoare la opțiunea "--enable-auto-import" a programului ld."
Acest mesaj apare atunci când o (sub)expresie accesează o adresă determinată, în ultimă instanță, de suma a două constante (tabelele de import Win32 permit doar una). Printre situațiile în care se poate întâmpla acest lucru se numără accesarea câmpurilor membre ale variabilelor struct importate dintr-o DLL, precum și utilizarea unui indice constant într-o variabilă de tip matrice importată dintr-o DLL. Orice variabilă cu mai multe cuvinte (matrici, structuri, long long etc.) poate declanșa această eroare. Cu toate acestea, indiferent de tipul exact de date al variabilei exportate care generează eroarea, ld o va detecta întotdeauna, va afișa avertismentul și va ieși.
Există mai multe modalități de a rezolva această problemă, indiferent de tipul de date al variabilei exportate:
O soluție este utilizarea opțiunii „--enable-runtime-pseudo-reloc”. Aceasta lasă sarcina ajustării referințelor în codul clientului în seama mediului de execuție, astfel încât această metodă funcționează numai dacă mediul de execuție acceptă această caracteristică.
O a doua soluție constă în a transforma una dintre „constantele” respective într-o variabilă — adică într-o valoare necunoscută și care nu poate fi optimizată în timpul compilării. În cazul matricilor, există două posibilități: a) transformarea elementului indexat (adresa matricei) într-o variabilă sau b) transformarea indexului „constant” într-o variabilă. Astfel:
extern type extern_array[]; extern_array[1] --> { volatile type *t=extern_array; t[1] }sau
extern type extern_array[]; extern_array[1] --> { volatile int t=1; extern_array[t] }Pentru structuri (și majoritatea celorlalte tipuri de date cu mai multe cuvinte), singura opțiune este de a face structura în sine variabilă (sau long long, sau ...):
extern struct s extern_struct; extern_struct.field --> { volatile struct s *t=&extern_struct; t->field }sau
extern long long extern_ll; extern_ll --> { volatile long long * local_ll=&extern_ll; *local_ll }O a treia metodă de a rezolva această problemă este renunțarea la 'auto-import' pentru simbolul problematic și marcarea acestuia cu "__declspec(dllimport)". Totuși, în practică, acest lucru necesită utilizarea unor #defines la compilare pentru a indica dacă se compilează o DLL, se compilează cod client care se va lega la DLL sau pur și simplu se compilează/se leagă la o bibliotecă statică. Atunci când se face alegerea între diversele metode de rezolvare a problemei 'adresă directă cu offset constant', ar trebui să se ia în considerare utilizarea tipică din lumea reală:
Original:
--foo.h extern int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ printf("%d\n",arr[1]); }Soluția 1:
--foo.h extern int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ /* Această soluție alternativă este destinată platformelor Win32 și Cygwin; nu o „optimizați” */ volatile int *parr = arr; printf("%d\n",parr[1]); }Soluția 2:
--foo.h /* Notă: se presupune exportul automat (fără __declspec(dllexport)) */ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) #define FOO_IMPORT __declspec(dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ printf("%d\n",arr[1]); }O a patra modalitate de a evita această problemă este de a vă recodifica biblioteca pentru a utiliza o interfață funcțională mai degrabă decât o interfață de date pentru variabilele în cauză (de exemplu, funcțiile de accesor set_foo() și get_foo()).
- --disable-auto-import
- Nu încearcă să facă legarea sofisticată a „_symbol” la „__imp__symbol” pentru importurile de DATE din DLL-uri. [Această opțiune este specifică adaptărilor PE vizate ale editorului de legături]
- --enable-runtime-pseudo-reloc
- Dacă codul dvs. conține expresii descrise în secțiunea --enable-auto-import, adică importuri de date din DLL cu un decalaj diferit de zero, această opțiune va crea un vector de „pseudo-realocări în timpul execuției” care poate fi utilizat de mediul de execuție pentru a ajusta referințele la astfel de date în codul clientului dvs. [Această opțiune este specifică adaptării editorului de legături destinate formatului PE]
- --disable-runtime-pseudo-reloc
- Nu creează pseudorealocări pentru importurile de DATE cu o poziție diferită de zero din DLL-uri. [Această opțiune este specifică versiunilor editorului de legături pentru PE]
- --enable-extra-pe-debug
- Afișează informații suplimentare de depanare referitoare la procesul de transformare a simbolurilor în timpul importului automat. [Această opțiune este specifică versiunilor editorului de legături pentru PE]
- --section-alignment
- Stabilește alinierea secțiunilor. Secțiunile din memorie vor începe întotdeauna la adrese care sunt un multiplu al acestui număr. Valoarea implicită este 0x1000. [Această opțiune este specifică versiunilor editorului de legături pentru PE]
- --stack rezerva
- --stack rezerva,angajată
- Specifică numărul de octeți de memorie care trebuie rezervați (și, opțional, alocați definitiv) pentru a fi folosiți ca stivă pentru acest program. Valoarea implicită este de 2 Mo rezervați și 4 Ko alocați definitiv. [Această opțiune este specifică versiunilor editorului de legături pentru iPE]
- --subsystem care
- --subsystem care:major
- --subsystem care:major.minor
- Specifică subsistemul în cadrul căruia se va executa
programul. Valorile permise pentru care sunt
"native",
"windows",
"console",
"posix" și
"xbox". Opțional, puteți
defini și versiunea subsistemului. Sunt acceptate, de asemenea,
valori numerice pentru care. [Această opțiune este
specifică versiunilor editorului de legături pentru PE]
Următoarele opțiuni activează fanioanele din câmpul "DllCharacteristics" al antetului fișierului PE: [Aceste opțiuni sunt specifice versiunii editorului de legături pentru PE]
- --high-entropy-va
- --disable-high-entropy-va
- Imaginea este compatibilă cu randomizarea aspectului
spațiului de adrese („address space layout
randomization”: ASLR) pe 64 de biți. Această
opțiune este activată în mod implicit pentru
imaginile PE pe 64 de biți din țintele MinGW.
Această opțiune implică, de asemenea, --dynamicbase și --enable-reloc-section. [Această opțiune este specifică versiunilor de 64 de biți ale editorului de legături pentru PE]
- --dynamicbase
- --disable-dynamicbase
- Adresa de bază a imaginii poate fi realocată folosind randomizarea dispunerii spațiului de adrese (ASLR). Această caracteristică a fost introdusă odată cu MS Windows Vista. Această opțiune este activată în mod implicit pentru țintele MinGW, dar poate fi dezactivată prin opțiunea --disable-dynamicbase. Această opțiune implică, de asemenea, opțiunea --enable-reloc-section.
- --forceinteg
- --disable-forceinteg
- Verificările de integritate a codului sunt puse în aplicare. Această opțiune este dezactivată în mod implicit.
- --nxcompat
- --disable-nxcompat
- Imaginea este compatibilă cu funcția Data Execution Prevention. Această funcție a fost introdusă odată cu MS Windows XP SP2. Opțiunea este activată în mod implicit pentru țintele MinGW.
- --no-isolation
- --disable-no-isolation
- Deși imaginea înțelege izolarea, nu izolează imaginea. Această opțiune este dezactivată în mod implicit.
- --no-seh
- --disable-no-seh
- Imaginea nu utilizează SEH. Nici un gestionar SE nu poate fi apelat din această imagine. Această opțiune este dezactivată în mod implicit.
- --no-bind
- --disable-no-bind
- Nu asociază această imagine. Această opțiune este dezactivată în mod implicit.
- --wdmdriver
- --disable-wdmdriver
- Controlorul folosește modelul de controlor MS Windows. Această opțiune este dezactivată în mod implicit.
- --tsaware
- --disable-tsaware
- Imaginea este compatibilă cu Terminal Server. Această opțiune este dezactivată în mod implicit.
- --insert-timestamp
- --no-insert-timestamp
- Inserează o marcă temporală reală în
imagine. Acesta este comportamentul implicit, deoarece este compatibil cu
codul vechi și înseamnă că imaginea va
funcționa cu alte instrumente proprietare. Problema cu
această opțiune implicită este că va duce la
generarea unor imagini ușor diferite de fiecare dată
când se leagă aceleași surse. Opțiunea
--no-insert-timestamp poate fi utilizată pentru a insera
valoarea zero pentru marcajul de timp, asigurându-se astfel
că fișierele binare generate din surse identice vor fi
comparate ca fiind identice.
Dacă opțiunea --insert-timestamp este activă, atunci ora inserată este fie ora la care are loc legarea, fie, dacă variabila de mediu "SOURCE_DATE_EPOCH" este definită, numărul de secunde scurse de la epoca Unix, așa cum este specificat de variabila respectivă.
- --enable-reloc-section
- --disable-reloc-section
- Creează tabelul de realocare a bazei, care este necesar în cazul în care imaginea este încărcată la o bază de imagine diferită de cea specificată în antetul PE. Această opțiune este activată în mod implicit.
Platforma C6X uClinux utilizează un format binar numit DSBT pentru a gestiona bibliotecile partajate. Fiecare bibliotecă partajată din sistem trebuie să aibă un index unic; toate fișierele executabile utilizează indexul 0.
- --dsbt-size dimensiunea
- Această opțiune definește numărul de intrări din tabelul DSBT al executabilului sau al bibliotecii partajate curente la size. Implicit, se creează un tabel cu 64 de intrări.
- --dsbt-index index
- Această opțiune definește indexul DSBT al
executabilului sau al bibliotecii partajate curente la index.
Valoarea implicită este 0, ceea ce este adecvat pentru generarea
executabilelor. Dacă se generează o bibliotecă
partajată cu un index DSBT egal cu 0, realocările
"R_C6000_DSBT_INDEX" sunt copiate
în fișierul de ieșire.
Opțiunea --no-merge-exidx-entries dezactivează combinarea intrărilor exidx adiacente în informațiile de desfășurare a cadrelor.
- --branch-stub
- Această opțiune permite relaxarea ramificațiilor de către editorul de legături prin inserarea unor secțiuni de ramificație fictive atunci când este necesar, pentru a extinde intervalul de ramificații. De obicei, această opțiune nu este necesară, deoarece C-SKY acceptă instrucțiuni de ramificație și de apel care pot accesa întregul interval de memorie, iar relaxarea ramificațiilor este gestionată, în mod normal, de compilator sau de asamblor.
- --stub-group-size=N
- Această opțiune permite un control mai fin asupra creării de cioturilor(stubs) de ramură de către editorul de legături. Ea stabilește dimensiunea maximă a unui grup de secțiuni de intrare care poate fi gestionat de o singură secțiune stub. O valoare negativă a lui N plasează secțiunile stub după cele de ramură, în timp ce o valoare pozitivă permite ca secțiunile stub să apară fie înainte, fie după ramificări. Valorile 1 sau -1 indică faptul că editorul de legături trebuie să aleagă valorile implicite adecvate.
Editorii de legături 68HC11 și 68HC12 acceptă opțiuni specifice pentru controlul cartografierii comutării băncilor de memorie și generarea de cod trambulină.
- --no-trampoline
- Această opțiune dezactivează generarea de trambuline. În mod implicit, se generează o trambulină pentru fiecare funcție îndepărtată care este apelată folosind o instrucțiune "jsr" (acest lucru se întâmplă atunci când se accesează un indicator către o funcție îndepărtată).
- --bank-window nume
- Această opțiune indică editorului de legături numele regiunii de memorie din specificația MEMORY care descrie fereastra băncii de memorie. Definiția acestei regiuni este apoi utilizată de editorul de legături pentru a calcula paginarea și adresele din cadrul ferestrei de memorie.
Sunt acceptate următoarele opțiuni pentru a controla modul de generare a GOT la legarea pentru ținte 68K.
- --got=tip
- Această opțiune indică editorului de legături ce schemă de generare GOT să utilizeze. tip trebuie să fie una dintre următoarele: single, negative, multigot sau target. Pentru mai multe informații, consultați intrarea Info pentru ld.
Următoarele opțiuni sunt acceptate pentru a controla generarea instrucțiunilor microMIPS și verificările de realocare de ramuri în cazul tranzițiilor între modurile ISA la legarea pentru țintele MIPS.
- --insn32
- --no-insn32
- Aceste opțiuni controlează alegerea instrucțiunilor microMIPS utilizate în codul generat de editorul de legături, cum ar fi cel din PLT, din stub-urile de legare leneșă sau în modul de relaxare. Dacă se utilizează --insn32, atunci editorul folosește numai codificări de instrucțiuni pe 32 de biți. În mod implicit sau dacă se utilizează --no-insn32, se folosesc toate codificările de instrucțiuni, inclusiv cele pe 16 biți, acolo unde este posibil.
- --ignore-branch-isa
- --no-ignore-branch-isa
- Aceste opțiuni controlează verificările de realocare a ramurilor pentru tranzițiile nevalide între modurile ISA. Dacă se utilizează --ignore-branch-isa, atunci editorul de legături acceptă orice realocări de ramuii, iar orice tranziție necesară în modul ISA se pierde în calculul relaocării, cu excepția unor cazuri de instrucțiuni "BAL" care îndeplinesc condițiile de relaxare și sunt convertite în instrucțiuni echivalente "JALX" pe măsură ce se calculează realocarea asociată. În mod implicit sau dacă se utilizează --no-ignore-branch-isa, se efectuează o verificare care determină ca pierderea unei tranziții de mod ISA să genereze o eroare.
- --compact-branches
- --no-compact-branches
- Aceste opțiuni controlează generarea de instrucțiuni compacte de către editorul de legături în intrările PLT pentru MIPS R6.
Pentru ținta pdp11-aout, pot fi generate trei variante ale formatului de ieșire, în funcție de opțiunile selectate mai jos. Varianta implicită pentru ținta pdp11-aout este opțiunea --omagic, în timp ce pentru alte ținte, opțiunea implicită este --nmagic. Opțiunea --imagic este definită numai pentru ținta pdp11-aout, în timp ce celelalte sunt descrise aici în măsura în care se aplică țintei pdp11-aout.
- -N
- --omagic
- Marchează ieșirea ca "OMAGIC" (0407) în antetul a.out pentru a indica faptul că segmentul de text nu trebuie să fie protejat împotriva scrierii și partajat. Deoarece atât secțiunea de text, cât și cea de date sunt citibile și inscriptibile, secțiunea de date este alocată imediat în continuare, contiguă segmentului de text. Acesta este cel mai vechi format pentru programele executabile PDP11 și este formatul implicit pentru ld pe sistemele Unix PDP11, de la început și până la versiunea 2.11BSD.
- -n
- --nmagic
- Marchează ieșirea ca "NMAGIC" (0410) în antetul a.out pentru a indica faptul că, atunci când fișierul de ieșire este executat, porțiunea de text va fi doar pentru citire și va putea fi partajată între toate procesele care execută același fișier. Aceasta implică mutarea zonelor de date până la prima limită posibilă de pagină de 8K octeți care urmează după sfârșitul textului. Această opțiune creează un format pure executable.
- -z
- --imagic
- Marchează ieșirea ca "IMAGIC" (0411) în antetul a.out pentru a indica faptul că, la executarea fișierului de ieșire, zonele de text și de date ale programului vor fi încărcate în spații de adrese separate, folosind funcția de separare a spațiului de instrucțiuni și a celui de date a unității de gestionare a memoriei din modelele mai mari ale PDP11. Astfel, spațiul de adrese disponibil pentru program se dublează. Segmentul de text este din nou pur, protejat împotriva scrierii și partajabil. Singura diferență în formatul de ieșire între această opțiune și celelalte, în afară de numărul magic, este că atât secțiunea de text, cât și cea de date încep de la locația 0. Opțiunea -z selecta acest format în 2.11BSD. Această opțiune creează un format executabil separat.
- --no-omagic
- Echivalent cu --nmagic pentru pdp11-aout.
MEDIU¶
Puteți modifica comportamentul ld folosind variabilele de mediu "GNUTARGET", "LDEMULATION" și "COLLECT_NO_DEMANGLE".
"GNUTARGET" determină formatul obiectului fișierului de intrare dacă nu se utilizează -b (sau sinonimul său --format). Valoarea sa trebuie să fie una dintre denumirile BFD pentru un format de intrare. Dacă nu există "GNUTARGET" în mediu, ld utilizează formatul natural al țintei. Dacă "GNUTARGET" este definit la "default", atunci BFD încearcă să descopere formatul de intrare examinând fișierele binare de intrare; această metodă are adesea succes, dar există potențiale ambiguități, deoarece nu există nicio metodă de a asigura că numărul magic folosit pentru a specifica formatele fișierelor-obiect este unic. Cu toate acestea, procedura de configurare a BFD pe fiecare sistem plasează formatul convențional pentru sistemul respectiv pe primul loc în lista de căutare, astfel încât ambiguitățile sunt rezolvate în favoarea convenției.
"LDEMULATION" determină emularea implicită dacă nu utilizați opțiunea -m. Emularea poate afecta diverse aspecte ale comportamentului editorului de legături, în special scriptul implicit al acestuia. Puteți afișa lista emulațiilor disponibile cu opțiunile --verbose sau -V. Dacă opțiunea -m nu este utilizată, iar variabila de mediu "LDEMULATION" nu este definită, emulația implicită depinde de modul în care a fost configurat editorul de legături.
În mod normal, editorul de legături va proceda în mod implicit la decodificarea simbolurilor. Cu toate acestea, dacă "COLLECT_NO_DEMANGLE" este definită în mediu, atunci se va renunța implicit la decodificarea simbolurilor. Această variabilă de mediu este utilizată într-o manieră similară de către programul "gcc" de învăluire a editorului de legături. Valoarea implicită poate fi anulată de opțiunile --demangle și --no-demangle.
Dacă opțiunea specifică PE/COFF --insert-timestamp este activă și variabila de mediu SOURCE_DATE_EPOCH este definită, atunci valoarea marcajului temporal din această variabilă va fi inserată în antetul COFF în locul orei curente.
Dacă variabila de mediu "LD_STATS" este definită, atunci vor fi înregistrate informațiile privind utilizarea resurselor de către editorul de legături, exact ca și cum s-ar fi folosit opțiunea --stats. Dacă variabila "LD_STATS" are o valoare de tip șir de caractere, aceasta va fi folosită ca nume al fișierului în care trebuie stocate informațiile. În caz contrar, informațiile vor fi trimise către fluxul de ieșire standard.
CONSULTAȚI ȘI¶
ar(1), nm(1), objcopy(1), objdump(1), readelf(1) și intrările Info pentru binutils și ld.
DREPTURI DE AUTOR¶
Drepturi de autor © 1991-2026 Free Software Foundation, Inc.
Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 21 octombrie 2026 | binutils-2.47.50 |