EnglezăFrancezăGermanăItalianăportughezăRusăSpaniolă

Favicon OnWorks

mips64el-linux-gnuabi64-ld - Online în cloud

Rulați mips64el-linux-gnuabi64-ld în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda mips64el-linux-gnuabi64-ld care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


ld - Linkerul GNU

REZUMAT


ld [Opțiuni] objfile ...

DESCRIERE


ld combină un număr de fișiere de obiecte și de arhivă, le reloca datele și leagă simbolul
referințe. De obicei, ultimul pas în compilarea unui program este rularea ld.

ld acceptă fișierele Linker Command Language scrise într-un superset al Link Editor-ului AT&T
Sintaxa limbajului de comandă, pentru a oferi control explicit și total asupra procesului de conectare.

Această pagină de manual nu descrie limbajul de comandă; vezi ld intrare în „informații” pentru întreg
detalii despre limbajul de comandă și despre alte aspecte ale linkerului GNU.

Această versiune a ld folosește bibliotecile BFD de uz general pentru a opera pe fișiere obiect. Acest
permite ld pentru a citi, combina și scrie fișiere obiect în multe formate diferite---pentru
de exemplu, COFF sau „a.out”. Diferite formate pot fi legate între ele pentru a produce oricare
tipul de fișier obiect disponibil.

Pe lângă flexibilitatea sa, linkerul GNU este mai util decât alți linkeri în furnizare
informatii de diagnostic. Mulți linkeri abandonează execuția imediat după ce întâlnesc un
eroare; ori de câte ori este posibil, ld se execută în continuare, permițându-vă să identificați alte erori
(sau, în unele cazuri, pentru a obține un fișier de ieșire în ciuda erorii).

Linkerul GNU ld este menit să acopere o gamă largă de situații și să fie la fel de compatibil
pe cât posibil cu alți linkeri. Drept urmare, aveți multe opțiuni pentru a-l controla
comportament.

OPŢIUNI


Linkerul acceptă o multitudine de opțiuni de linie de comandă, dar, în practică, puține dintre ele
sunt folosite în orice context anume. De exemplu, o utilizare frecventă a ld este de a lega
fișiere obiect standard Unix pe un sistem Unix standard, acceptat. Pe un astfel de sistem, să
leagă un fișier „hello.o”:

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

Acest lucru spune ld pentru a produce un fișier numit producție ca rezultat al conectării fișierului
„/lib/crt0.o” cu „hello.o” și biblioteca „libc.a”, care va veni din standard
caută directoare. (Vezi discuția despre -l opțiunea de mai jos.)

Unele dintre opțiunile din linia de comandă la ld poate fi specificat în orice punct al liniei de comandă.
Cu toate acestea, opțiunile care se referă la fișiere, cum ar fi -l or -T, faceți ca fișierul să fie citit la
punctul în care apare opțiunea în linia de comandă, relativ la fișierele obiect și
alte opțiuni de fișier. Repetarea opțiunilor non-fișier cu un argument diferit va avea fie
nici un efect suplimentar sau suprascrie aparițiile anterioare (cele aflate mai în stânga la comandă
linia) din acea opțiune. Opțiunile care pot fi specificate în mod semnificativ de mai multe ori sunt
notate în descrierile de mai jos.

Argumentele non-opțiuni sunt fișiere obiect sau arhive care urmează să fie legate între ele. ei
poate urma, precede sau poate fi amestecat cu opțiunile din linia de comandă, cu excepția unui fișier obiect
argumentul nu poate fi plasat între o opțiune și argumentul acesteia.

De obicei linker-ul este invocat cu cel puțin un fișier obiect, dar puteți specifica altul
forme de fișiere binare de intrare folosind -l, -R, și limbajul de comandă de script. Dacă Nu. binar
Fișierele de intrare sunt specificate, linkerul nu produce nicio ieșire și emite fișierul
mesaj Nu intrare fișiere.

Dacă linkerul nu poate recunoaște formatul unui fișier obiect, va presupune că este un
script de linker. Un script specificat în acest fel crește scriptul principal de linker folosit pentru
linkul (fie scriptul implicit de linker, fie cel specificat prin utilizarea -T). Acest
caracteristica permite linkerului să facă legătura cu un fișier care pare a fi un obiect sau un
arhiva, dar de fapt definește doar unele valori de simbol sau folosește „INPUT” sau „GROUP” pentru
încărcați alte obiecte. Specificarea unui script în acest fel nu face decât să mărească linkerul principal
script, cu comenzile suplimentare plasate după scriptul principal; folosește -T opțiunea de înlocuire
scriptul implicit de linker în întregime, dar rețineți efectul comenzii „INSERT”.

Pentru opțiunile ale căror nume sunt o singură literă, argumentele opțiunii trebuie fie să urmeze
litera de opțiune fără spații albe intermediare sau să fie date ca argumente separate
imediat urmand varianta care le impune.

Pentru opțiunile ale căror nume sunt mai multe litere, fie o liniuță, fie două pot precede
numele opțiunii; de exemplu, -urmă-simbol și --simbol-urmă sunt echivalente. Notă --- acolo
este o excepție de la această regulă. Opțiuni cu mai multe litere care încep cu „o” minuscul
poate fi precedat doar de două liniuțe. Acest lucru este pentru a reduce confuzia cu -o opțiune. Asa de
de exemplu -omagic setează numele fișierului de ieșire la magie întrucât --omagic setează NMAGIC
steag pe ieșire.

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

Notă --- dacă linkerul este invocat indirect, printr-un driver de compilator (de ex gcc) atunci
toate opțiunile liniei de comandă ale linkerului ar trebui să fie prefixate de -Wl, (sau orice este potrivit
pentru driverul de compilare specific) astfel:

gcc -Wl,--start-group foo.o bar.o -Wl,--end-group

Acest lucru este important, deoarece, în caz contrar, programul de driver al compilatorului poate renunța în liniște
opțiunile de linker, rezultând un link prost. De asemenea, poate apărea confuzie la trecerea opțiunilor
care necesită valori printr-un driver, cum ar fi utilizarea unui spațiu între opțiune și argument
acționează ca un separator și determină șoferul să transmită doar opțiunea linkerului și
argument către compilator. În acest caz, cel mai simplu este să folosiți formele unite ale ambelor
opțiuni cu o singură literă și mai multe litere, cum ar fi:

gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

Iată un tabel cu comutatoarele generice ale liniei de comandă acceptate de linkerul GNU:

@fişier
Citiți opțiunile din linia de comandă din fişier. Opțiunile citite sunt inserate în locul lui
original @fişier opțiune. Dacă fişier nu există, sau nu poate fi citit, atunci opțiunea
vor fi tratate la propriu și nu eliminate.

Opțiuni în fişier sunt separate prin spații albe. Poate fi inclus un caracter alb
într-o opțiune înconjurând întreaga opțiune fie între ghilimele simple, fie duble. Orice
caracterul (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care trebuie să fie
incluse cu o bară oblică inversă. The fişier poate conține în sine @ suplimentarfişier Opțiuni; orice
astfel de opțiuni vor fi procesate recursiv.

-a cuvinte cheie
Această opțiune este acceptată pentru compatibilitatea HP/UX. The cuvinte cheie argumentul trebuie să fie unul dintre
corzile Arhiva, comun, Sau lipsă. -o arhivă este echivalent din punct de vedere funcțional cu
-Bstatic, iar celelalte două cuvinte cheie sunt echivalente funcțional cu -Bdinamic. Acest
opțiunea poate fi folosită de câte ori.

--audit AUDITLIB
Adaugă AUDITLIB la intrarea „DT_AUDIT” a secțiunii dinamice. AUDITLIB nu este verificat
pentru existență și nici nu va folosi DT_SONAME specificat în bibliotecă. Dacă este specificat
de mai multe ori „DT_AUDIT” va conține o listă separată de două puncte de interfețe de audit către
utilizare. Dacă linkerul găsește un obiect cu o intrare de audit în timp ce caută shared
biblioteci, va adăuga o intrare corespunzătoare „DT_DEPAUDIT” în fișierul de ieșire. Acest
opțiunea are sens numai pe platformele ELF care acceptă interfața rtld-audit.

-A arhitectură
--arhitectura=arhitectură
În versiunea curentă a ld, această opțiune este utilă numai pentru familia Intel 960 de
arhitecturi. In aceea ld configurație, arhitectură argumentul identifică
arhitectură specială din familia 960, permițând unele garanții și modificând
cale de căutare arhivă-biblioteca.

Lansări viitoare ale ld poate suporta funcționalități similare pentru altă arhitectură
familii.

-b formatul de intrare
--format=formatul de intrare
ld poate fi configurat să accepte mai mult de un tip de fișier obiect. Dacă ale tale ld is
configurat astfel, puteți utiliza -b opțiunea de a specifica formatul binar pentru intrare
fișiere obiect care urmează această opțiune pe linia de comandă. Chiar și când ld este configurat
pentru a accepta formate de obiecte alternative, de obicei nu trebuie să specificați acest lucru, deoarece ld
ar trebui configurat pentru a aștepta ca format de intrare implicit cel mai obișnuit format pentru fiecare
mașină. formatul de intrare este un șir de text, numele unui anumit format acceptat de
bibliotecile BFD. (Puteți lista formatele binare disponibile cu objdump -i.)

Poate doriți să utilizați această opțiune dacă conectați fișiere cu un binar neobișnuit
format. De asemenea, puteți utiliza -b pentru a schimba formatele în mod explicit (când conectați fișierele obiect
de diferite formate), prin includerea -b formatul de 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, folosind comanda „TARGET”;

-c Fișier de comandă RMN
--mri-script=Fișier de comandă RMN
Pentru compatibilitate cu linkerii produși prin RMN, ld acceptă fișiere script scrise într-un
limbaj de comandă alternativ, restricționat, descris în fișierele de script compatibile cu RMN
secțiunea documentației GNU ld. Introduceți fișierele script RMN cu opțiunea -c; utilizare
il -T opțiunea de a rula scripturi de linker scrise în uz general ld Scripting
limba. Dacă RMN-cmdfile nu exista, ld îl caută în directoarele specificate
de orice -L opțiuni.

-d
-DC
-dp Aceste trei opțiuni sunt echivalente; mai multe forme sunt acceptate pentru compatibilitate
cu alți linkeri. Ele atribuie spațiu simbolurilor comune chiar dacă o ieșire relocabilă
este specificat fișierul (cu -r). Comanda de script „FORCE_COMMON_ALLOCATION” are
acelasi efect.

--depaudit AUDITLIB
-P AUDITLIB
Adaugă AUDITLIB la intrarea „DT_DEPAUDIT” a secțiunii dinamice. AUDITLIB nu este
verificat pentru existență și nici nu va folosi DT_SONAME specificat în bibliotecă. Dacă
specificat de mai multe ori „DT_DEPAUDIT” va conține o listă de audit separată cu două puncte
interfețe de utilizat. Această opțiune are sens numai pe platformele ELF care acceptă
interfață rtld-audit. Opțiunea -P este furnizată pentru compatibilitatea Solaris.

-e intrare
--intrare=intrare
Utilizare intrare ca simbol explicit pentru începerea execuției programului dvs., mai degrabă decât
punctul de intrare implicit. Dacă nu există niciun simbol numit intrare, linkerul va încerca
analiza intrare ca număr și utilizați-l ca adresă de intrare (numărul va fi
interpretat în baza 10; puteți folosi un lider 0x pentru baza 16, sau un lider 0 pentru baza
8).

--exclude-libs lib,lib, ...
Specifică o listă de biblioteci de arhivă din care simbolurile nu ar trebui să apară automat
exportate. Numele bibliotecii pot fi delimitate prin virgule sau două puncte. Precizând
„--exclude-libs ALL” exclude simbolurile din toate bibliotecile de arhivă de la exportul automat.
Această opțiune este disponibilă numai pentru portul vizat i386 PE al linkerului și pentru ELF
porturi vizate. Pentru i386 PE, simbolurile enumerate în mod explicit într-un fișier .def sunt încă
exportate, indiferent de această opțiune. Pentru porturile vizate ELF, simboluri afectate de aceasta
opțiunea va fi tratată ca ascunsă.

--exclude-module-for-implib modul,modul, ...
Specifică o listă de fișiere obiect sau membri de arhivă, din care simbolurile nu ar trebui să apară
exportate automat, dar care ar trebui copiate angro în biblioteca de import
fiind generat în timpul legăturii. Numele modulelor pot fi delimitate prin virgule sau
două puncte și trebuie să se potrivească exact cu numele fișierelor utilizate de ld pentru a deschide fișierele; pentru arhivare
membri, acesta este pur și simplu numele membrului, dar pentru fișierele obiect trebuie să numele listat
include și potrivește exact orice cale folosită pentru a specifica fișierul de intrare pe linker
Linie de comanda. Această opțiune este disponibilă numai pentru portul vizat i386 PE al
linker. Simbolurile enumerate în mod explicit într-un fișier .def sunt încă exportate, indiferent de
această opțiune.

-E
--export-dinamic
--fără-export-dinamic
Când creați un executabil conectat dinamic, folosiți -E sau opțiunea
--export-dinamic opțiunea face linkerul să adauge toate simbolurile la simbolul dinamic
masa. Tabelul de simboluri dinamice este setul de simboluri care sunt vizibile din dinamic
obiecte în timpul rulării.

Dacă nu utilizați niciuna dintre aceste opțiuni (sau utilizați --fără-export-dinamic opțiunea pentru
restaurați comportamentul implicit), tabelul cu simboluri dinamice va conține în mod normal numai
acele simboluri la care se referă un obiect dinamic menționat în link.

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

De asemenea, puteți utiliza lista dinamică pentru a controla ce simboluri trebuie adăugate la
tabel de simboluri dinamice dacă formatul de ieșire îl acceptă. Vezi descrierea lui
--lista-dinamică.

Rețineți că această opțiune este specifică porturilor vizate ELF. Țintele PE susțin un similar
funcție pentru a exporta toate simbolurile dintr-un DLL sau EXE; vezi descrierea
--export-toate-simbolurile de mai jos.

-EB Leagă obiecte big-endian. Acest lucru afectează formatul implicit de ieșire.

-EL Conectați obiecte little-endian. Acest lucru afectează formatul implicit de ieșire.

-f nume
--auxiliar=nume
Când creați un obiect partajat ELF, setați câmpul intern DT_AUXILIARY la
numele specificat. Acest lucru îi spune linkerului dinamic că tabelul de simboluri a partajat
obiectul trebuie folosit ca filtru auxiliar pe tabelul de simboluri al obiectului partajat
nume.

Dacă mai târziu legați un program cu acest obiect de filtru, atunci când rulați
program, linkerul dinamic va vedea câmpul DT_AUXILIARY. Dacă linkerul dinamic
rezolvă orice simboluri din obiectul filtru, va verifica mai întâi dacă există o
definiție în obiectul partajat nume. Dacă există unul, acesta va fi folosit în locul lui
definiție în obiectul filtru. Obiectul comun nume nu trebuie să existe. Astfel, cel
obiect comun nume poate fi folosit pentru a oferi o implementare alternativă a anumitor
funcții, poate pentru depanare sau pentru performanța specifică mașinii.

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

-F nume
--filtru=nume
Când creați un obiect partajat ELF, setați câmpul intern DT_FILTER la valoarea specificată
Nume. Aceasta îi spune linkerului dinamic că tabelul de simboluri al obiectului partajat care
este în curs de creare ar trebui să fie folosit ca filtru pe tabelul de simboluri al obiectului partajat
nume.

Dacă mai târziu legați un program cu acest obiect de filtru, atunci când rulați
program, linkerul dinamic va vedea câmpul DT_FILTER. Linkerul dinamic va
rezolvați simbolurile conform tabelului de simboluri al obiectului filtru ca de obicei, dar acesta
se va lega de fapt la definițiile găsite în obiectul partajat nume. Astfel
obiect filtru poate fi folosit pentru a selecta un subset de simboluri furnizate de obiect
nume.

Unii linkeri mai vechi au folosit -F opțiune de-a lungul unui lanț de instrumente de compilare pentru
specificarea formatului de fișier obiect atât pentru fișierele obiect de intrare, cât și pentru fișierele obiect de ieșire. Linkerul GNU
folosește în acest scop alte mecanisme: cel -b, --format, --oformat opțiuni,
Comanda „TARGET” în scripturile de linker și variabila de mediu „GNUTARGET”. GNU
linkerul va ignora -F opțiunea atunci când nu se creează un obiect partajat ELF.

-fini=nume
Când creați un executabil ELF sau un obiect partajat, apelați NAME când executabilul sau
obiectul partajat este descărcat, prin setarea DT_FINI la adresa funcției. De
implicit, linkerul folosește „_fini” ca funcție de apelat.

-g Ignorat. Prevăzut pentru compatibilitate cu alte instrumente.

-G valoare
--gpsize=valoare
Setați dimensiunea maximă a obiectelor de optimizat folosind registrul GP la mărimea. Acest
este semnificativă doar pentru formatele de fișiere obiect, cum ar fi MIPS ELF, care acceptă punerea mari
și obiecte mici în diferite secțiuni. Acest lucru este ignorat pentru alt fișier obiect
formate.

-h nume
-sonam=nume
Când creați un obiect partajat ELF, setați câmpul intern DT_SONAME la valoarea specificată
Nume. Când un executabil este legat cu un obiect partajat care are un câmp DT_SONAME,
atunci când executabilul este rulat, linkerul dinamic va încerca să încarce fișierul partajat
obiect specificat de câmpul DT_SONAME, mai degrabă decât utilizarea numelui de fișier dat
linkerul.

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

-init=nume
Când creați un executabil ELF sau un obiect partajat, apelați NAME când executabilul sau
obiectul partajat este încărcat, setând DT_INIT la adresa funcției. De
implicit, linkerul folosește „_init” ca funcție de apelat.

-l namespec
--biblioteca=namespec
Adăugați arhiva sau fișierul obiect specificat de namespec la lista de fișiere de conectat.
Această opțiune poate fi folosită de orice număr. Dacă namespec este de forma :nume de fișier, ld
va căuta în calea bibliotecii un fișier numit nume de fișier, altfel va căuta
calea bibliotecii pentru un fișier numit libnamespec.a.

Pe sistemele care acceptă biblioteci partajate, ld poate căuta și alte fișiere decât
libnamespec.a. Mai exact, pe sistemele ELF și SunOS, ld va căuta un director pentru
o bibliotecă numită libnamespec.so înainte de a căuta un apelat libnamespec.a. (De
convenție, o extensie „.so” indică o bibliotecă partajată.) Rețineți că acest comportament
nu se aplica la :nume de fișier, care specifică întotdeauna un fișier numit nume de fișier.

Linkerul va căuta o arhivă o singură dată, în locația în care este specificată
linia de comandă. Dacă arhiva definește un simbol care a fost nedefinit într-un obiect
care a apărut înaintea arhivei pe linia de comandă, linkerul va include
fișier(e) adecvat(e) din arhivă. Cu toate acestea, un simbol nedefinit într-un obiect
apariția mai târziu pe linia de comandă nu va determina linkerul să caute în arhivă
din nou.

A se vedea -( opțiune pentru o modalitate de a forța linkerul să caute în arhive de mai multe ori.

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

Acest tip de căutare în arhivă este standard pentru linkerii Unix. Totuși, dacă ești
folosind ld pe AIX, rețineți că este diferit de comportamentul linker-ului AIX.

-L searchdir
--library-path=searchdir
Adăugați calea searchdir la lista de căi care ld va căuta biblioteci de arhivă şi
ld scripturi de control. Puteți utiliza această opțiune de orice număr de ori. Directoarele sunt
căutate în ordinea în care sunt specificate pe linia de comandă. Directoare
specificate pe linia de comandă sunt căutate înaintea directoarelor implicite. Toate -L
opțiunile se aplică tuturor -l opțiuni, indiferent de ordinea în care apar opțiunile.
-L opțiunile nu afectează modul în care ld caută un script de linker, cu excepția cazului în care -T opțiunea este
specificat.

If searchdir începe cu „=", apoi „=" va fi înlocuit cu sysroot prefix,
controlat de --sysroot opțiune sau specificat când linkerul este configurat.

Setul implicit de căi căutate (fără a fi specificat cu -L) depinde de care
modul de emulare ld folosește și, în unele cazuri, de asemenea, despre modul în care a fost configurat.

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

-m emulație
Emulați emulație linker. Puteți enumera emulațiile disponibile cu ajutorul
--verbos or -V opțiuni.

În cazul în care -m opțiunea nu este utilizată, emularea este preluată din „LDEMULATION”
variabilă de mediu, dacă aceasta este definită.

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

-M
--print-hartă
Imprimați o hartă a legăturii către rezultatul standard. O hartă de link oferă informații despre
link, inclusiv următoarele:

· Unde fișierele obiect sunt mapate în memorie.

· Cum sunt alocate simbolurile comune.

· Toți membrii arhivei incluși în link, cu mențiunea simbolului care
a făcut ca membrul arhivei să fie adus.

· Valorile atribuite simbolurilor.

Notă - simboluri ale căror valori sunt calculate printr-o expresie care implică a
referirea la o valoare anterioară a aceluiași simbol poate să nu aibă un rezultat corect
afișate în harta linkului. Acest lucru se datorează faptului că linkerul aruncă intermediarul
rezultă și păstrează doar valoarea finală a unei expresii. Sub asemenea
circumstanțe, linkerul va afișa valoarea finală cuprinsă între paranteze drepte.
Astfel, de exemplu, un script linker care conține:

foo = 1
foo = foo * 4
foo = foo + 8

va produce următoarea ieșire în harta linkului dacă -M se foloseste optiunea:

0x00000001 foo = 0x1
[0x0000000c] foo = (foo * 0x4)
[0x0000000c] foo = (foo + 0x8)

Vedea Expresii pentru mai multe informații despre expresiile din scripturile linker.

-n
--nmagic
Dezactivați alinierea paginilor secțiunilor și dezactivați legătura cu bibliotecile partajate. Dacă
formatul de ieșire acceptă numere magice în stil Unix, marcați rezultatul ca „NMAGIC”.

-N
--omagic
Setați secțiunile de text și date pentru a putea fi citite și scrise. De asemenea, nu aliniați pagina
segmentul de date și dezactivați legătura cu bibliotecile partajate. Dacă formatul de ieșire
acceptă numere magice în stil Unix, marcați rezultatul ca „OMAGIC”. Notă: Deși a
secțiunea de text inscriptibil este permisă pentru ținte PE-COFF, nu este conformă cu
specificație de format publicată de Microsoft.

--fără-omagic
Această opțiune anulează majoritatea efectelor -N opțiune. Setează secțiunea de text la
să fie numai pentru citire și forțează ca segmentul de date să fie aliniat la pagină. Notă - această opțiune o face
nu activați legătura cu bibliotecile partajate. Utilizare -Bdinamic pentru asta.

-o producție
--ieșire=producție
Utilizare producție ca nume pentru programul produs de ld; dacă această opțiune nu este
specificat, numele a.out este folosit implicit. Comanda de script „OUTPUT” poate, de asemenea
specificați numele fișierului de ieșire.

-O nivel
If nivel este o valoare numerică mai mare decât zero ld optimizează ieșirea. Asta ar putea
durează mult mai mult și, prin urmare, probabil ar trebui să fie activat doar pentru finală
binar. Momentan, această opțiune afectează doar generarea de biblioteci partajate ELF. Viitor
versiunile linkerului pot folosi mai mult această opțiune. De asemenea, în prezent nu există
diferență în comportamentul linkerului pentru diferite valori diferite de zero ale acestei opțiuni.
Din nou, acest lucru se poate schimba cu versiunile viitoare.

--stare-împingere
--stare-împingere permite păstrarea stării actuale a steagurilor care guvernează
gestionarea fișierelor de intrare, astfel încât toate acestea să poată fi restaurate cu unul corespunzător
--pop-stare opțiune.

Opțiunile care sunt acoperite sunt: -Bdinamic, -Bstatic, -dn, - dy, -call_shared,
-non_shared, -static, -N, -n, --toată-arhiva, --no-toată-arhivă, -r, -Ur,
--copy-dt-needed-enters, --no-copy-dt-needed-enters, --după cum este necesar, --nu-așa cum este necesar,
și -a.

O țintă pentru această opțiune sunt specificațiile pentru pkg-config. Când este utilizat cu
--libs opțiunea toate bibliotecile posibil necesare sunt listate și apoi posibil legate cu
tot timpul. Este mai bine să returnați ceva după cum urmează:

-Wl,--stare-push,--așa cum este necesar -libone -libtwo -Wl,--stare-pop

Anulează efectul --push-state, restabilește valorile anterioare ale steagurilor care guvernează
manipularea fișierelor de intrare.

-q
--emit-relocs
Lăsați secțiunile și conținutul de relocare în executabile complet conectate. Postează link
instrumentele de analiză și optimizare pot avea nevoie de aceste informații pentru a funcționa corect
modificări ale executabilelor. Acest lucru duce la executabile mai mari.

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

--forță-dinamică
Forțați fișierul de ieșire să aibă secțiuni dinamice. Această opțiune este specifică pentru VxWorks
ținte.

-r
--relocabil
Generați rezultate relocabile --- adică, generați un fișier de ieșire care poate servi, la rândul său, ca
intrare la ld. Acesta este adesea numit parțial legarea. Ca efect secundar, în medii
care acceptă numere magice standard Unix, această opțiune setează și fișierele de ieșire
număr magic la „OMAGIC”. Dacă această opțiune nu este specificată, este un fișier absolut
produs. Când conectați programe C++, această opțiune voi nu rezolva referirile la
constructori; pentru a face asta, folosește -Ur.

Atunci când un fișier de intrare nu are același format ca fișierul de ieșire, legături parțiale
este acceptat numai dacă acel fișier de intrare nu conține nicio relocare. Diferit
formatele de ieșire pot avea restricții suplimentare; de exemplu unele formate bazate pe „a.out”.
nu acceptă deloc legătura parțială cu fișierele de intrare în alte formate.

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

-R nume de fișier
--doar-simboluri=nume de fișier
Citiți numele simbolurilor și adresele acestora din nume de fișier, dar nu-l mutați sau includeți
acesta în ieșire. Acest lucru permite fișierului dvs. de ieșire să se refere simbolic la absolut
locații ale memoriei definite în alte programe. Puteți utiliza această opțiune mai mult decât
o singura data.

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

-s
--despui-toate
Omiteți toate informațiile despre simbol din fișierul de ieșire.

-S
--strip-debug
Omiteți informațiile despre simbolul depanatorului (dar nu toate simbolurile) din fișierul de ieșire.

-t
--urmă
Tipăriți numele fișierelor de intrare ca ld le prelucrează.

-T fişier script
--script=fişier script
Utilizare fişier script ca script linker. Acest script înlocuiește ldscriptul de linker implicit al lui
(în loc să adaugi la ea), deci fişierul de comandă trebuie să precizeze tot ceea ce este necesar pentru
descrieți fișierul de ieșire. Dacă fişier script nu există în directorul curent,
„ld” îl caută în directoarele specificate de oricare precedent -L Opțiuni. Multiplu
-T opțiunile se acumulează.

-dT fişier script
--default-script=fişier script
Utilizare fişier script ca script de linker implicit.

Această opțiune este similară cu --script opțiune, cu excepția faptului că procesarea scriptului este
amânată până după ce restul liniei de comandă a fost procesată. Asta permite
opțiunile plasate după --default-script opțiunea de pe linia de comandă pentru a afecta
comportamentul script-ului linker, care poate fi important atunci când linia de comandă linker
nu poate fi controlat direct de utilizator. (de exemplu, deoarece linia de comandă este
construit cu un alt instrument, cum ar fi gcc).

-u simbol
--nedefinit=simbol
Forţarea simbol pentru a fi introdus în fișierul de ieșire ca simbol nedefinit. Făcând asta poate,
de exemplu, declanșează conectarea modulelor suplimentare din bibliotecile standard. -u poate fi
repetat cu argumente de opțiune diferite pentru a introduce simboluri suplimentare nedefinite. Acest
opțiunea este echivalentă cu comanda de script de linker „EXTERN”.

Dacă această opțiune este utilizată pentru a forța modulele suplimentare să fie trase în legătură,
iar dacă este o eroare ca simbolul să rămână nedefinit, atunci opțiunea
--necesită-definită ar trebui folosit în schimb.

--require-defined=simbol
Solicita asta simbol este definit în fișierul de ieșire. Această opțiune este aceeași cu opțiunea
--nedefinit cu excepţia faptului că dacă simbol nu este definit în fișierul de ieșire, apoi linkerul
va emite o eroare și va ieși. Același efect poate fi obținut într-un script linker prin
folosind „EXTERN”, „ASSERT” și „DEFINED” împreună. Această opțiune poate fi utilizată de mai multe ori
ori pentru a necesita simboluri suplimentare.

-Ur Pentru orice altceva decât programele C++, această opțiune este echivalentă cu -r: generează
ieșire relocabilă --- adică, un fișier de ieșire care poate servi, la rândul său, ca intrare la ld. Când
conectarea programelor C++, -Ur face rezolva referințe la constructori, spre deosebire de -r. Da
nu funcționează pentru utilizare -Ur pe fișiere cu care au fost ele însele legate -Ur; odata ce
tabelul constructorului a fost construit, nu poate fi adăugat. Utilizare -Ur numai pentru ultimul
legătură parțială și -r pentru ceilalti.

--orphan-handling=MODE
Controlați modul în care sunt gestionate secțiunile orfane. O secțiune orfană nu este în mod specific
menționat într-un script de linker.

MODE poate avea oricare dintre următoarele valori:

"loc"
Secțiunile orfane sunt plasate într-o secțiune de ieșire adecvată, urmând strategie
descris în Orfan Secţiuni. Optiunea --unic afectează și modul în care sunt secțiunile
plasat.

"arunca"
Toate secțiunile orfane sunt aruncate, prin plasarea lor în /ALTARE/ secţiune.

"a avertiza"
Linker-ul va plasa secțiunea orfană ca pentru „loc” și, de asemenea, va emite un avertisment.

"eroare"
Linker-ul se va închide cu o eroare dacă se găsește vreo secțiune orfană.

Valoarea implicită dacă --orfan-manipulare nu este dat este „loc”.

--unic[=SECȚIUNEA]
Creează o secțiune de ieșire separată pentru fiecare potrivire a secțiunii de intrare SECȚIUNEA, sau dacă
wildcard opțional SECȚIUNEA Argumentul lipsește, pentru fiecare secțiune de intrare orfană. Un
secțiunea orfană este una care nu este menționată în mod specific într-un script de linker. Puteți folosi acest lucru
opțiunea de mai multe ori pe linia de comandă; Împiedică îmbinarea normală a intrărilor
secțiuni cu același nume, suprascriind asignările secțiunilor de ieșire într-un script de linker.

-v
--versiune
-V Afișați numărul versiunii pentru ld. -V opțiunea listează și emulațiile acceptate.

-x
--aruncă-toate
Ștergeți toate simbolurile locale.

-X
--aruncă-localnici
Ștergeți toate simbolurile locale temporare. (Aceste simboluri încep cu local specific sistemului
prefixe de etichetă, de obicei .L pentru sisteme ELF sau L pentru sistemele tradiționale a.out.)

-y simbol
--trace-simbol=simbol
Tipăriți numele fiecărui fișier legat în care simbol apare. Această opțiune poate fi dată
orice număr de ori. Pe multe sisteme este necesar să adăugați un caracter de subliniere.

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

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

-z cuvinte cheie
Cuvintele cheie recunoscute sunt:

combreloc
Combină mai multe secțiuni de relocare și le sortează pentru a face căutarea dinamică a simbolurilor
este posibilă stocarea în cache.

def
Nu permite simboluri nedefinite în fișierele obiect. Simboluri nedefinite în partajat
bibliotecile sunt încă permise.

execstack
Marchează obiectul ca necesitând stivă executabilă.

global
Această opțiune are sens numai atunci când construiești un obiect partajat. Face ca
simboluri definite de acest obiect partajat disponibile pentru rezoluția simbolurilor
biblioteci încărcate ulterior.

initfirst
Această opțiune are sens numai atunci când construiești un obiect partajat. Acesta marchează obiectul
astfel încât inițializarea în timp de execuție va avea loc înainte de inițializarea în timp de execuție a
orice alte obiecte aduse în proces în același timp. În mod similar, cel
finalizarea runtime a obiectului va avea loc după finalizarea runtime a
orice alte obiecte.

interpune
Marchează obiectul pe care tabelul său de simboluri îl interpune înaintea tuturor simbolurilor, cu excepția
executabil primar.

leneș
Când generați o bibliotecă executabilă sau partajată, marcați-o pentru a spune dinamica
linker pentru a amâna rezoluția apelurilor de funcție până la punctul în care funcția este apelată
(legare leneșă), mai degrabă decât în ​​timpul încărcării. Legarea leneșă este implicită.

loadfltr
Marchează obiectul pentru ca filtrele sale să fie procesate imediat în timpul execuției.

muldefs
Permite definiții multiple.

nocombreloc
Dezactivează combinarea mai multor secțiuni de relocare.

nocopyreloc
Dezactivați variabilele .dynbss generate de linker utilizate în locul variabilelor definite în
biblioteci partajate. Poate duce la relocari dinamice ale textului.

nodefaultlib
Marchează obiectul că căutarea dependențelor acestui obiect va ignora oricare
căile de căutare implicite în bibliotecă.

nodelete
Marca că obiectul nu ar trebui să fie descărcat în timpul execuției.

nodlopen
Marchează obiectul nedisponibil pentru „dlopen”.

nodump
Marchează că obiectul nu poate fi aruncat prin „dldump”.

noexecstack
Marchează obiectul ca nu necesită stivă executabilă.

text
Tratați DT_TEXTREL în obiectul partajat ca eroare.

notext
Nu tratați DT_TEXTREL din obiectul partajat ca eroare.

textoff
Nu tratați DT_TEXTREL din obiectul partajat ca eroare.

norelro
Nu creați un antet de segment ELF „PT_GNU_RELRO” în obiect.

acum Când generați o bibliotecă executabilă sau partajată, marcați-o pentru a spune dinamica
linker pentru a rezolva toate simbolurile atunci când programul este pornit sau când este partajat
biblioteca este legată de utilizarea dlopen, în loc să amâne rezoluția apelurilor de funcție
până la punctul în care funcția este apelată pentru prima dată.

origine
Marca că obiectul poate conține $ORIGIN.

relro
Creați un antet de segment ELF „PT_GNU_RELRO” în obiect.

max-page-size=valoare
Setați dimensiunea maximă a paginii de emulare la valoare.

common-page-size=valoare
Setați dimensiunea paginii comune de emulare la valoare.

dimensiunea stivei=valoare
Specificați o dimensiune a stivei pentru un segment ELF „PT_GNU_STACK”. Specificarea voinței zero
suprascrieți orice creație implicită de segment „PT_GNU_STACK” de dimensiune diferită de zero.

bndplt
Generați întotdeauna prefixul BND în intrările PLT. Suportat pentru Linux/x86_64.

noextern-protected-date
Nu tratați simbolul de date protejate ca fiind extern atunci când construiți o bibliotecă partajată. Acest
opțiunea înlocuiește implicit backend-ul linker. Poate fi folosit pentru o soluție incorectă
relocari împotriva simbolurilor de date protejate generate de compilator. Actualizări pe
simbolurile de date protejate de către alt modul nu sunt vizibile pentru partajarea rezultată
bibliotecă. Suportat pentru i386 și x86-64.

call-nop=prefix-adr
call-nop=prefix-nop
call-nop=sufix-nop
call-nop=prefix-octet
call-nop=sufix-octet
Specificați umplutura „NOP” de 1 octet atunci când transformați apelul indirect într-un apel local
funcția definită, foo, prin slotul său GOT. call-nop=prefix-adr generează „0x67
sună foo”. call-nop=prefix-nop generează „0x90 call foo”. call-nop=sufix-nop
generează „call foo 0x90”. call-nop=prefix-octet genereaza "octet apel prost".
call-nop=sufix-octet generează „call foo octet". Suportat pentru i386 și x86_64.

Alte cuvinte cheie sunt ignorate pentru compatibilitatea Solaris.

-( arhive -)
--începe-grup arhive --final-grup
arhive ar trebui să fie o listă de fișiere de arhivă. Acestea pot fi fie fișiere explicite
nume, sau -l opțiuni.

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

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

--accept-unknown-input-arch
--no-accept-unknown-input-arch
Spune linkerului să accepte fișiere de intrare a căror arhitectură nu poate fi recunoscută. The
presupunerea este că utilizatorul știe ce face și dorește în mod deliberat să conecteze
în aceste fișiere de intrare necunoscute. Acesta a fost comportamentul implicit al linkerului, înainte
lansarea 2.14. Comportamentul implicit de la versiunea 2.14 în continuare este de a respinge o astfel de intrare
fișiere și așadar --accept-unknown-input-arch a fost adăugată opțiunea pentru a restaura vechiul
comportament.

--după cum este necesar
--nu-așa cum este necesar
Această opțiune afectează etichetele ELF DT_NEEDED pentru bibliotecile dinamice menționate în comandă
linie după --după cum este necesar opțiune. În mod normal, linkerul va adăuga o etichetă DT_NEEDED pentru
fiecare bibliotecă dinamică menționată pe linia de comandă, indiferent dacă biblioteca
este de fapt necesar sau nu. --după cum este necesar face ca o etichetă DT_NEEDED să fie emisă numai pentru
o bibliotecă care at acea punct in il legătură satisface un simbol neslab nedefinit
referință dintr-un fișier obiect obișnuit sau, dacă biblioteca nu este găsită în DT_NEEDED
liste cu alte biblioteci necesare, o referință de simbol non-slab nedefinit de la alta
avea nevoie de o bibliotecă dinamică. Fișierele obiect sau bibliotecile care apar pe linia de comandă după
biblioteca în cauză nu afectează dacă biblioteca este văzută ca fiind necesar. Aceasta este
similar cu regulile de extragere a fișierelor obiect din arhive. --nu-așa cum este necesar
restabilește comportamentul implicit.

--adăugați-necesar
--nu este nevoie de adăugare
Aceste două opțiuni au fost depreciate din cauza asemănării numelor lor cu
--după cum este necesar și --nu-așa cum este necesar Opțiuni. Au fost înlocuite de
--copy-dt-needed-enters și --no-copy-dt-needed-enters.

-afirma cuvinte cheie
Această opțiune este ignorată pentru compatibilitatea SunOS.

-Bdinamic
- dy
-call_shared
Link către biblioteci dinamice. Acest lucru are sens numai pe platformele pentru care s-a partajat
bibliotecile sunt acceptate. Această opțiune este în mod normal implicită pe astfel de platforme. The
diferite variante ale acestei opțiuni sunt pentru compatibilitate cu diverse sisteme. Poți
utilizați această opțiune de mai multe ori pe linia de comandă: afectează căutarea în bibliotecă
-l opțiunile care îl urmează.

-Bgrup
Setați indicatorul „DF_1_GROUP” în intrarea „DT_FLAGS_1” din secțiunea dinamică. Acest
face ca linkerul de rulare să gestioneze căutările în acest obiect și dependențele sale
efectuate numai în interiorul grupului. --unresolved-symbols=raportează-toate este subînțeles. Acest
opțiunea are sens numai pe platformele ELF care acceptă biblioteci partajate.

-Bstatic
-dn
-non_shared
-static
Nu conectați cu bibliotecile partajate. Acest lucru are sens numai pe platformele pentru care
bibliotecile partajate sunt acceptate. Diferitele variante ale acestei optiuni sunt pt
compatibilitate cu diverse sisteme. Puteți utiliza această opțiune de mai multe ori pe
linie de comandă: afectează căutarea în bibliotecă -l opțiunile care îl urmează. Acest
presupune, de asemenea, opțiunea --unresolved-symbols=raportează-toate. Această opțiune poate fi folosită cu
-impartit. Acest lucru înseamnă că o bibliotecă partajată este creată, dar că toate
referințele externe ale bibliotecii trebuie rezolvate prin extragerea intrărilor din statice
biblioteci.

-Bsimbolic
Când creați o bibliotecă partajată, legați referințele la simboluri globale la definiție
în cadrul bibliotecii partajate, dacă există. În mod normal, este posibil pentru un program legat
față de o bibliotecă partajată pentru a suprascrie definiția din biblioteca partajată. Acest
opțiunea poate fi folosită și cu --export-dinamic opțiunea, la crearea unei poziții
executabil independent, pentru a lega referințe la simboluri globale la definiția din interior
executabilul. Această opțiune are sens numai pe platformele ELF care acceptă partajarea
biblioteci și executabile independente de poziție.

-Funcții-simbolice
Când creați o bibliotecă partajată, legați referințele la simbolurile de funcție globale la
definiție în biblioteca partajată, dacă există. Această opțiune poate fi folosită și cu
--export-dinamic opțiunea, când se creează un executabil independent de poziție, de a lega
referințe la simboluri de funcție globale la definiția din executabil. Acest
opțiunea este semnificativă doar pe platformele ELF care acceptă biblioteci și poziții partajate
executabile independente.

--dynamic-list=fișier-listă-dinamică
Specificați numele unui fișier de listă dinamică pentru linker. Acesta este de obicei folosit când
crearea de biblioteci partajate pentru a specifica o listă de simboluri globale ale căror referințe
nu ar trebui să fie legat de definiția din biblioteca partajată sau de creare
executabile legate dinamic pentru a specifica o listă de simboluri la care ar trebui adăugate
tabelul de simboluri din executabil. Această opțiune are sens numai pe platformele ELF
care acceptă biblioteci partajate.

Formatul listei dinamice este același cu nodul versiunii fără scop și nod
Nume. Vedea VERSIUNE pentru mai multe informatii.

--dynamic-list-data
Includeți toate simbolurile de date globale în lista dinamică.

--dynamic-list-cpp-new
Furnizați lista dinamică încorporată pentru operatorul C++ nou și ștergeți. Este util în principal
pentru construirea libstdc++ partajată.

--dynamic-list-cpp-typeinfo
Furnizați lista dinamică încorporată pentru identificarea tipului de rulare C++.

--verifica-secţiuni
--fără-verifică-secțiuni
Întreabă linkerul nu pentru a verifica adresele secțiunilor după ce au fost atribuite pentru a vedea dacă
există suprapuneri. În mod normal, linkerul va efectua această verificare și dacă găsește
orice suprapuneri va produce mesaje de eroare adecvate. Linkerul știe despre și
face rezerve pentru secțiunile suprapuse. Comportamentul implicit poate fi restabilit
folosind comutatorul din linia de comandă --verifica-secţiuni. Suprapunerea secțiunilor nu este de obicei
verificat pentru legături relocabile. Puteți forța verificarea în acest caz utilizând
--verifica-secţiuni opțiune.

--copy-dt-needed-enters
--no-copy-dt-needed-enters
Această opțiune afectează tratarea bibliotecilor dinamice la care se face referire prin etichetele DT_NEEDED
în interiorul Bibliotecile dinamice ELF menționate pe linia de comandă. În mod normal, linkerul nu va
adăugați o etichetă DT_NEEDED la binarul de ieșire pentru fiecare bibliotecă menționată într-o etichetă DT_NEEDED
într-o bibliotecă dinamică de intrare. Cu --copy-dt-needed-enters specificat în comandă
cu toate acestea, orice bibliotecă dinamică care o urmează va avea intrările lor DT_NEEDED
adăugat. Comportamentul implicit poate fi restabilit cu --no-copy-dt-needed-enters.

Această opțiune are, de asemenea, un efect asupra rezoluției simbolurilor din bibliotecile dinamice.
Cu --copy-dt-needed-enters bibliotecile dinamice menționate pe linia de comandă vor fi
căutat recursiv, urmând etichetele lor DT_NEEDED către alte biblioteci, pentru a
rezolvați simbolurile cerute de binarul de ieșire. Cu setarea implicită, totuși
căutarea bibliotecilor dinamice care o urmează se va opri cu biblioteca dinamică
în sine. Nu vor fi parcurse linkuri DT_NEEDED pentru a rezolva simbolurile.

--cref
Produceți un tabel de referințe încrucișate. Dacă este generat un fișier de hartă linker, crucea
tabelul de referință este imprimat în fișierul hartă. În caz contrar, este tipărit pe standard
ieșire.

Formatul tabelului este în mod intenționat simplu, astfel încât să poată fi procesat cu ușurință de către
un scenariu dacă este necesar. Simbolurile sunt tipărite, sortate după nume. Pentru fiecare simbol,
este dată o listă de nume de fișiere. Dacă simbolul este definit, primul fișier listat este
locația definiției. Dacă simbolul este definit ca o valoare comună, atunci orice fișier
unde se întâmplă acest lucru apar în continuare. În cele din urmă, toate fișierele care fac referire la simbol sunt
enumerate.

--no-define-common
Această opțiune inhibă alocarea adreselor simbolurilor comune. Scenariul
comanda „INHIBIT_COMMON_ALLOCATION” are același efect.

--no-define-common opțiunea permite decuplarea deciziei de a atribui adrese
Simboluri comune din alegerea tipului de fișier de ieșire; în caz contrar, un non-Relocabil
tipul de ieșire forțează atribuirea adreselor simbolurilor comune. Folosind --no-define-common
permite alocarea simbolurilor comune la care se face referire dintr-o bibliotecă partajată
adrese numai în programul principal. Acest lucru elimină spațiul duplicat neutilizat din
bibliotecă partajată și, de asemenea, previne orice posibilă confuzie privind rezolvarea greșită
duplicat atunci când există multe module dinamice cu căi de căutare specializate pentru
rezoluția simbolului de rulare.

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

--demangle[=stil]
--nu-demangle
Aceste opțiuni controlează dacă să se dezmegleze numele simbolurilor în mesajele de eroare și altele
ieșire. Când linkerului i se spune să demangleze, încearcă să prezinte nume de simbol în a
mod lizibil: elimină caracterele de subliniere de început dacă sunt folosite de fișierul obiect
format și convertește numele simbolurilor alterate C++ în nume care pot fi citite de utilizator. Diferit
compilatoarele au diferite stiluri de manipulare. Argumentul opțional stil de demangling poate
poate fi folosit pentru a alege un stil de demangling adecvat pentru compilator. Linker-ul va
demangle în mod implicit, cu excepția cazului în care variabila de mediu COLLECT_NO_DEMANGLE este setat. Aceste
opțiunile pot fi folosite pentru a înlocui valoarea implicită.

-Ifişier
--dynamic-linker=fişier
Setați numele linkerului dinamic. Acest lucru are sens numai atunci când se generează
executabile ELF legate dinamic. Linkerul dinamic implicit este în mod normal corect;
nu folosi asta decât dacă știi ce faci.

--no-dynamic-linker
Când produceți un fișier executabil, omiteți solicitarea unui linker dinamic pentru a fi utilizat la
timpul de încărcare. Acest lucru este semnificativ doar pentru executabilele ELF care conțin dinamic
relocari și, de obicei, necesită un cod de punct de intrare capabil să le proceseze
relocari.

--avertismente-fatale
--fără-avertismente-fatale
Tratați toate avertismentele ca erori. Comportamentul implicit poate fi restabilit cu opțiunea
--fără-avertismente-fatale.

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

Dacă un fișier de ieșire complet conectat construit cu succes nu are „.exe” sau „.dll”
sufix, această opțiune forțează linkerul să copieze fișierul de ieșire într-unul cu același nume
cu un sufix „.exe”. Această opțiune este utilă atunci când utilizați fișiere makefile Unix nemodificate pe a
Gazdă Microsoft Windows, deoarece unele versiuni de Windows nu vor rula o imagine decât dacă aceasta
se termină cu un sufix „.exe”.

--gc-secţiuni
--fără-gc-secțiuni
Activați colectarea de gunoi a secțiunilor de intrare neutilizate. Este ignorat pe ținte care o fac
nu acceptă această opțiune. Comportamentul implicit (de a nu efectua acest gunoi
colecție) poate fi restaurată prin specificarea --fără-gc-secțiuni pe linia de comandă. Notă
acea colectare a gunoiului pentru ținte în format COFF și PE este acceptată, dar
implementarea este în prezent considerată a fi experimentală.

--gc-secţiuni decide ce secţiuni de intrare sunt folosite examinând simbolurile şi
relocari. Secțiunea care conține simbolul de intrare și toate secțiunile care conțin
simbolurile nedefinite pe 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 construiți biblioteci partajate,
linkerul trebuie să presupună că orice simbol vizibil este referit. Odată ce acest set inițial de
secțiunile au fost determinate, linkerul marchează recursiv ca utilizată orice secțiune
la care se face referire prin relocarile lor. Vedea --intrare și --nedefinit.

Această opțiune poate fi setată atunci când se realizează o legătură parțială (activată cu opțiunea -r). In acest
în cazul în care rădăcina simbolurilor păstrate trebuie specificată în mod explicit fie prin an --intrare or
--nedefinit opțiunea sau printr-o comandă „ENTRY” în scriptul linker.

--print-gc-sections
--no-print-gc-sections
Listați toate secțiunile eliminate de colectarea gunoiului. Lista este tipărită pe stderr.
Această opțiune este eficientă numai dacă colectarea gunoiului a fost activată prin intermediul
--gc-secţiuni) opțiune. Comportamentul implicit (de a nu enumera secțiunile care sunt
eliminat) poate fi restaurat prin specificarea --no-print-gc-sections pe linia de comandă.

--print-output-format
Tipăriți numele formatului implicit de ieșire (poate influențat de altă linie de comandă
Opțiuni). Acesta este șirul care ar apărea într-un script de linker „OUTPUT_FORMAT”.
comanda.

--print-memory-usage
Tipăriți dimensiunea utilizată, dimensiunea totală și dimensiunea utilizată a regiunilor de memorie create cu MEMORIE
comanda. Acest lucru este util pe ținte încorporate pentru a avea o vedere rapidă a cantității de liber
memorie. Formatul rezultatului are un titlu și o linie per regiune. Este
atât ușor de citit de om, cât și ușor de analizat prin instrumente. Iată un exemplu de ieșire:

Regiune de memorie Dimensiune utilizată Dimensiunea regiunii % vârstă utilizată
ROM: 256 KB 1 MB 25.00%
RAM: 32 B 2 GB 0.00%

--Ajutor
Tipăriți un rezumat al opțiunilor din linia de comandă pe ieșirea standard și ieșire.

--ţintă-ajutor
Tipăriți un rezumat al tuturor opțiunilor specifice țintei pe ieșirea și ieșirea standard.

-Harta=mapfile
Imprimați o hartă a legăturii către fișier mapfile. Vezi descrierea -M opțiunea, mai sus.

--nu-pastram-memoria
ld optimizează în mod normal pentru viteza de utilizare a memoriei prin memorarea în cache a tabelelor de simboluri ale
fișiere de intrare în memorie. Această opțiune spune ld pentru a optimiza în schimb pentru utilizarea memoriei, de
recitind tabelele cu simboluri după caz. Acest lucru poate fi necesar dacă ld rămâne fără
spațiu de memorie în timp ce conectați un executabil mare.

--nu-nedefinit
-z def
Raportați referințele de simbol nerezolvate din fișierele obiect obișnuite. Acest lucru se face chiar dacă
linkerul creează o bibliotecă partajată non-simbolică. Schimbarea
--[no-]allow-shlib-undefined controlează comportamentul pentru raportarea nerezolvată
referințele găsite în bibliotecile partajate fiind conectate în.

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

--allow-shlib-undefined
--no-allow-shlib-undefined
Permite sau interzice simboluri nedefinite în bibliotecile partajate. Acest comutator este similar cu
--nu-nedefinit cu excepția faptului că determină comportamentul atunci când simbolurile nedefinite sunt
într-o bibliotecă partajată, mai degrabă decât într-un fișier obiect obișnuit. Nu afectează cum
simbolurile nedefinite din fișierele obiect obișnuite sunt gestionate.

Comportamentul implicit este de a raporta erori pentru orice simbol nedefinit la care se face referire în
biblioteci partajate dacă linkerul este folosit pentru a crea un executabil, dar pentru a permite
dacă linkerul este folosit pentru a crea o bibliotecă partajată.

Motivele pentru a permite referințe de simbol nedefinite în bibliotecile partajate specificate la
ora link-ului sunt următoarele:

· O bibliotecă partajată specificată la momentul conexiunii poate să nu fie aceeași cu cea care este
disponibil la momentul încărcării, astfel încât simbolul ar putea fi de fapt rezolvabil în timpul încărcării.

· Există unele sisteme de operare, de exemplu BeOS și HPPA, în care sunt introduse simboluri nedefinite
bibliotecile partajate sunt normale.

Nucleul BeOS, de exemplu, corectează bibliotecile partajate la momentul încărcării pentru a le selecta
oricare dintre funcțiile este cea mai potrivită pentru arhitectura actuală. Aceasta este
folosit, de exemplu, pentru a selecta dinamic o funcție memset adecvată.

--no-undefined-version
În mod normal, atunci când un simbol are o versiune nedefinită, linkerul îl va ignora. Acest
opțiunea nu permite simbolurile cu versiunea nedefinită și va fi emisă o eroare fatală
in schimb.

--default-symver
Creați și utilizați o versiune implicită a simbolului (numele) pentru simbolurile exportate neversionate.

--default-imported-symver
Creați și utilizați o versiune implicită de simbol (numele) pentru simbolurile importate neversionate.

--nu-avertizam-nepotrivire
În mod normal ld va da o eroare dacă încercați să legați împreună fișierele de intrare care sunt
nepotrivite din anumite motive, poate pentru că au fost compilate pentru diferite
procesoare sau pentru diferite endianness. Această opțiune spune ld că ar trebui
permite în tăcere astfel de posibile erori. Această opțiune ar trebui folosită numai cu grijă, în
cazurile în care ați luat o acțiune specială care vă asigură că erorile de linker sunt
nepotrivit.

--no-warn-search-nepotrivire
În mod normal ld va da un avertisment dacă găsește o bibliotecă incompatibilă în timpul unei biblioteci
căutare. Această opțiune reduce la tăcere avertismentul.

--no-toată-arhivă
Opriți efectul --toată-arhiva opțiune pentru fișierele de arhivă ulterioare.

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

-nostdlib
Căutați numai directoarele bibliotecii specificate explicit pe linia de comandă. Bibliotecă
directoarele specificate în scripturile de linker (inclusiv scripturile de linker specificate în
linia de comandă) sunt ignorate.

--oformat=format de iesire
ld poate fi configurat să accepte mai mult de un tip de fișier obiect. Dacă ale tale ld is
configurat astfel, puteți utiliza --oformat opțiunea pentru a specifica formatul binar pentru
fișierul obiect de ieșire. Chiar și când ld este configurat pentru a suporta obiect alternativ
formate, de obicei nu trebuie să specificați acest lucru, deoarece ld ar trebui configurat pentru a produce
ca format implicit de ieșire, cel mai obișnuit format de pe fiecare mașină. format de iesire este
șir de text, numele unui anumit format acceptat de bibliotecile BFD. (Poti
enumerați formatele binare disponibile cu objdump -i.) Comanda de script
„OUTPUT_FORMAT” poate specifica și formatul de ieșire, dar această opțiune îl înlocuiește.

-plăcintă
--pic-executable
Creați un executabil independent de poziție. În prezent, acest lucru este acceptat numai pe ELF
platforme. Executabilele independente de poziție sunt similare cu bibliotecile partajate
acestea sunt relocate de către linkerul dinamic la adresa virtuală pentru care o alege sistemul de operare
ele (care pot varia între invocări). Ca și executabilele normale legate dinamic
ele pot fi executate și simbolurile definite în executabil nu pot fi înlocuite de
biblioteci partajate.

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

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

--Relaxați-vă
--nu-relaxează-te
O opțiune cu efecte dependente de mașină. Această opțiune este acceptată doar pentru câteva
ținte.

Pe unele platforme --Relaxați-vă opțiunea realizează optimizări globale specifice țintei
care devin posibile atunci când linker-ul rezolvă adresarea în program, cum ar fi
relaxarea modurilor de adresă, sintetizarea instrucțiunilor noi, selectarea versiunii mai scurte a
instrucțiunile curente și combinarea valorilor constante.

Pe unele platforme, aceste optimizări globale ale timpului de legătură pot face depanare simbolică
executabilul rezultat imposibil. Se știe că acesta este cazul Matsushita
Familia de procesoare MN10200 și MN10300.

Pe platformele unde acest lucru nu este acceptat, --Relaxați-vă este acceptat, dar ignorat.

Pe platformele unde --Relaxați-vă este acceptată opțiunea --nu-relaxează-te poate fi folosit pentru a dezactiva
caracteristica.

--retain-symbols-file=nume de fișier
Reține numai simbolurile enumerate în dosar nume de fișier, eliminând toate celelalte. nume de fișier
este pur și simplu un fișier plat, cu un nume de simbol pe linie. Această opțiune este în special
util în medii (cum ar fi VxWorks) în care este un tabel global mare de simboluri
acumulate treptat, pentru a conserva memoria de rulare.

--retain-symbols-file face nu aruncați simbolurile nedefinite sau simbolurile necesare pentru
relocari.

Puteți doar să specificați --retain-symbols-file o dată în linia de comandă. Ea trece peste -s
și -S.

-rpath=dir
Adăugați un director la calea de căutare a bibliotecii de execuție. Acesta este folosit atunci când conectați un ELF
executabil cu obiecte partajate. Toate -rpath argumentele sunt concatenate și transmise la
linkerul runtime, care le folosește pentru a localiza obiecte partajate în timpul rulării. The -rpath
opțiunea este folosită și la localizarea obiectelor partajate care sunt necesare obiectelor partajate
incluse în mod explicit în link; vezi descrierea -rpath-link opțiune. Dacă
-rpath nu este utilizat atunci când se conectează un executabil ELF, conținutul mediului
variabila „LD_RUN_PATH” va fi utilizată dacă este definită.

-rpath opțiunea poate fi utilizată și pe SunOS. În mod implicit, pe SunOS, linker-ul va
formează o cale de căutare în timp de execuție din toate -L opțiunile care i se oferă. În cazul în care o -rpath opțiune
este utilizat, calea de căutare în timp de execuție va fi formată exclusiv folosind -rpath opțiuni
ignorând -L Opțiuni. Acest lucru poate fi util atunci când utilizați gcc, care adaugă multe -L
opțiuni care pot fi pe sisteme de fișiere montate NFS.

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

-rpath-link=dir
Când utilizați ELF sau SunOS, o bibliotecă partajată poate necesita alta. Acest lucru se întâmplă când un
Linkul „ld -shared” include o bibliotecă partajată ca unul dintre fișierele de intrare.

Când linkerul întâlnește o astfel de dependență atunci când face un non-shared, non-relocatable
link, va încerca automat să localizeze biblioteca partajată necesară și să o includă
în link, dacă nu este inclus în mod explicit. Într-un astfel de caz, -rpath-link opțiune
specifică primul set de directoare de căutat. The -rpath-link opțiunea poate specifica
o succesiune de nume de directoare fie prin specificarea unei liste de nume separate prin
două puncte sau prin apariția de mai multe ori.

Această opțiune trebuie utilizată cu precauție, deoarece suprascrie calea de căutare pe care o poate avea
a fost greu compilat într-o bibliotecă partajată. Într-un astfel de caz este posibil să se utilizeze
neintenționat, o cale de căutare diferită decât ar face linkerul de rulare.

Linkerul folosește următoarele căi de căutare pentru a localiza bibliotecile partajate necesare:

1. Orice directoare specificate de -rpath-link opțiuni.

2. Orice directoare specificate de -rpath Opțiuni. Diferența dintre -rpath și
-rpath-link este că directoarele specificate de -rpath opțiunile sunt incluse în
executabil și utilizat în timpul execuției, în timp ce -rpath-link opțiunea este doar eficientă
la momentul link-ului. In cautarea -rpath în acest fel este suportat doar de linkerii nativi și
reticularele care au fost configurate cu --cu-syroot opțiune.

3. Pe un sistem ELF, pentru linkerii nativi, dacă -rpath și -rpath-link opțiunile au fost
nu este utilizat, căutați conținutul variabilei de mediu „LD_RUN_PATH”.

4. Pe SunOS, dacă -rpath opțiunea nu a fost folosită, căutați în orice directoare specificate
folosind -L opțiuni.

5. Pentru un linker nativ, căutați conținutul variabilei de mediu
„LD_LIBRARY_PATH”.

6. Pentru un linker ELF nativ, directoarele din „DT_RUNPATH” sau „DT_RPATH” ale unui
bibliotecile sunt căutate pentru bibliotecile partajate necesare pentru aceasta. Intrările „DT_RPATH” sunt
ignorat dacă există intrări „DT_RUNPATH”.

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

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

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

-impartit
-Bshareable
Creați o bibliotecă partajată. În prezent, acest lucru este acceptat numai pe ELF, XCOFF și SunOS
platforme. Pe SunOS, linkerul va crea automat o bibliotecă partajată dacă -e
opțiunea nu este utilizată și există simboluri nedefinite în link.

--sort-comun
--sort-common=ascendent
--sort-common=descendent
Această opțiune spune ld pentru a sorta simbolurile comune după aliniere crescător sau
ordine descrescătoare când le plasează în secțiunile de ieșire corespunzătoare. Simbolul
aliniamentele luate în considerare sunt de șaisprezece octeți sau mai mari, opt octeți, patru octeți, doi octeți și
un octet. Acest lucru este pentru a preveni golurile dintre simboluri din cauza constrângerilor de aliniere. Daca nu
este specificată ordinea de sortare, apoi se presupune ordinea descrescătoare.

--sort-section=nume
Această opțiune va aplica „SORT_BY_NAME” tuturor tiparelor de secțiuni cu caractere metalice din linker
script-ul.

--sort-section=aliniere
Această opțiune va aplica „SORT_BY_ALIGNMENT” tuturor tiparelor de secțiuni cu caractere joker din
script de linker.

--divizat-cu-fișier[=mărimea]
similar --split-by-reloc dar creează o nouă secțiune de ieșire pentru fiecare fișier de intrare când
mărimea este atins. mărimea implicit la o dimensiune de 1 dacă nu este dat.

--split-by-reloc[=conta]
Încearcă să creeze secțiuni suplimentare în fișierul de ieșire, astfel încât să nu intre nicio secțiune de ieșire
fisierul contine mai mult de conta relocari. Acest lucru este util atunci când se generează uriașe
fișiere relocabile pentru descărcare în anumite nuclee în timp real cu obiectul COFF
tipul fisierului; întrucât COFF nu poate reprezenta mai mult de 65535 de relocări într-o singură
secțiune. Rețineți că acest lucru nu va funcționa cu formate de fișiere obiect care nu funcționează
suportă secțiuni arbitrare. Linkerul nu va împărți secțiunile de intrare individuale
pentru redistribuire, deci dacă o singură secțiune de intrare conține mai mult de conta relocari
o secțiune de ieșire va conține atât de multe relocari. conta implicit la o valoare de
32768.

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

--sysroot=director
Utilizare director ca locație a sysroot-ului, suprascriind valoarea implicită de configurare.
Această opțiune este acceptată numai de linkerii care au fost configurați folosind --cu-syroot.

--format-tradițional
Pentru unele ținte, rezultatul de ld este diferită în anumite privințe de rezultatul unora
linker existent. Această comutare solicită ld pentru a folosi în schimb formatul tradițional.

De exemplu, pe SunOS, ld combină intrări duplicate în tabelul cu șiruri de simboluri. Acest
poate reduce dimensiunea unui fișier de ieșire cu informații complete de depanare cu peste 30
la sută. Din păcate, programul SunOS „dbx” nu poate citi programul rezultat
(„gdb” nu are probleme). The --format-tradițional comutatorul spune ld a nu combina
intrări duplicat.

--section-start=nume secțiune=org
Localizați o secțiune în fișierul de ieșire la adresa absolută dată de org. Puteți folosi
această opțiune de câte ori este necesar pentru a localiza mai multe secțiuni în comandă
linia. org trebuie să fie un singur întreg hexazecimal; pentru compatibilitate cu alte linkeri,
puteți omite conducerea 0x asociate de obicei cu valori hexazecimale. Notă: acolo
nu trebuie să existe spațiu alb între nume secțiune, semnul egal ("="), și org.

-Tbss=org
-Tdata=org
-Ttext=org
La fel ca --section-start, cu „.bss”, „.data” sau „.text” drept nume secțiune.

-Ttext-segment=org
Când se creează un executabil ELF, acesta va seta adresa primului octet al textului
segment.

-Trodata-segment=org
Când se creează un executabil ELF sau un obiect partajat pentru o țintă în care sunt date numai citire
este în propriul său segment separat de textul executabil, va seta adresa
primul octet al segmentului de date numai pentru citire.

-Tldata-segment=org
Când creați un executabil ELF sau un obiect partajat pentru modelul de memorie medie x86-64, acesta
va seta adresa primului octet al segmentului ldata.

--unresolved-simbols=metodă
Determinați cum să gestionați simbolurile nerezolvate. Există patru valori posibile pentru
metodă:

ignora tot
Nu raportați niciun simbol nerezolvat.

raportează-toate
Raportați toate simbolurile nerezolvate. Aceasta este valoarea implicită.

ignora-în-fișierele-obiect
Raportați simbolurile nerezolvate care sunt conținute în bibliotecile partajate, dar ignorați-le
dacă provin din fișiere obiect obișnuite.

ignore-in-shared-libs
Raportați simbolurile nerezolvate care provin din fișiere obiect obișnuite, dar ignorați-le dacă
provin din biblioteci comune. Acest lucru poate fi util atunci când creați o dinamică
binar și se știe că toate bibliotecile partajate pe care ar trebui să le facă referire
sunt incluse pe linia de comandă a linkerului.

Comportamentul pentru bibliotecile partajate pe cont propriu poate fi controlat și de către
--[no-]allow-shlib-undefined opțiune.

În mod normal, linkerul va genera un mesaj de eroare pentru fiecare simbol nerezolvat raportat
dar optiunea --warn-unresolved-simbols poate schimba acest lucru într-un avertisment.

--dll-verbose
--verbos[=NUMĂR]
Afișați numărul versiunii pentru ld și enumerați emulațiile de linker acceptate. Afişa
care fișiere de intrare pot și nu pot fi deschise. Afișează scriptul de linker folosit de
linkerul. Dacă opțional NUMĂR argument > 1, starea simbolului pluginului va fi, de asemenea
afișat.

--version-script=versiune-scriptfile
Specificați numele unui script de versiune pentru linker. Acesta este de obicei folosit când
crearea de biblioteci partajate pentru a specifica informații suplimentare despre versiune
ierarhie pentru biblioteca care se creează. Această opțiune este pe deplin acceptată numai pe ELF
platforme care acceptă biblioteci partajate; vedea VERSIUNE. Este parțial suportat pe
Platforme PE, care pot folosi scripturi de versiune pentru a filtra vizibilitatea simbolurilor în exportul automat
mod: orice simboluri marcate local în scriptul de versiune nu va fi exportat.

--avertizează-obișnuit
Avertizați când un simbol comun este combinat cu un alt simbol comun sau cu un simbol
definiție. Linkerii Unix permit această practică oarecum neglijentă, dar linkerii pe unele
alte sisteme de operare nu. Această opțiune vă permite să găsiți potențiale probleme
din combinarea simbolurilor globale. Din păcate, unele biblioteci C folosesc această practică, deci
este posibil să primiți niște avertismente despre simboluri în biblioteci, precum și în programele dvs.

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

int i = 1;
O definiție, care merge î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 fie a
definiție sau un simbol comun pentru variabilă undeva.

int i;
Un simbol comun. Dacă există doar (unul sau mai multe) simboluri comune pentru o variabilă,
merge în zona de date neinițializată a fișierului de ieșire. Linker-ul fuzionează
mai multe simboluri comune pentru aceeași variabilă într-un singur simbol. Daca sunt
de diferite dimensiuni, alege cea mai mare dimensiune. Linkerul transformă un simbol comun
într-o declarație, dacă există o definiție a aceleiași variabile.

--avertizează-obișnuit opțiunea poate produce cinci tipuri de avertismente. Fiecare avertisment constă în
o pereche de linii: prima descrie simbolul tocmai întâlnit, iar a doua
descrie simbolul anterior întâlnit cu același nume. Unul sau ambii din cei doi
simbolurile vor fi un simbol comun.

1. Transformarea unui simbol comun într-o referință, pentru că există deja o definiție
pentru simbol.

( ): avertisment: comun de ` '
depășit prin definiție
( ): avertisment: definit aici

2. Transformarea unui simbol comun într-o referință, deoarece o definiție ulterioară pentru
simbolul este întâlnit. Acesta este același cu cazul precedent, cu excepția faptului că
simbolurile sunt întâlnite într-o ordine diferită.

( ): avertisment: definiția lui ` '
comun superior
( ): avertisment: comun este aici

3. Îmbinarea unui simbol comun cu un simbol comun anterior de aceeași dimensiune.

( ): avertisment: multiple comune
de ` '
( ): avertisment: comunul anterior este aici

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

( ): avertisment: comun de ` '
depășit de comun mai mare
( ): avertisment: comun mai mare este aici

5. Îmbinarea unui simbol comun cu un simbol comun anterior mai mic. Asta e lafel
ca și în cazul precedent, cu excepția faptului că simbolurile sunt întâlnite într-un alt mod
comandă.

( ): avertisment: comun de ` '
suprascriind comun mai mic
( ): avertisment: mai mic comun este aici

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

--warn-multiple-gp
Avertizați dacă sunt necesare mai multe valori globale de indicator în fișierul de ieșire. Aceasta este numai
semnificativ pentru anumite procesoare, cum ar fi Alpha. Mai exact, unele procesoare
puneți constante cu valori mari într-o secțiune specială. Un registru special (global
pointer) indică în mijlocul acestei secțiuni, astfel încât constantele să poată fi încărcate
eficient printr-un mod de adresare relativă a registrului de bază. Din moment ce compensarea în bază-
Modul relativ al registrului este fix și relativ mic (de exemplu, 16 biți), acest lucru limitează
dimensiunea maximă a bazinului constant. Astfel, în programele mari, este adesea necesar să
utilizați mai multe valori globale de indicator pentru a putea aborda toate posibilele
constante. Această opțiune face ca un avertisment să fie emis ori de câte ori apare acest caz.

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

--warn-section-align
Avertizați dacă adresa unei secțiuni de ieșire este schimbată din cauza alinierii. De obicei,
alinierea va fi stabilită de o secțiune de intrare. Adresa va fi schimbată numai dacă aceasta
nu este specificat în mod explicit; adică dacă comanda „SECȚII” nu specifică un început
adresa pentru sectiune.

--warn-shared-textrel
Avertizați dacă linkerul adaugă un DT_TEXTREL la un obiect partajat.

--warn-alternate-em
Avertizați dacă un obiect are un cod de mașină ELF alternativ.

--warn-unresolved-simbols
Dacă linkerul va raporta un simbol nerezolvat (consultați opțiunea
--simboluri-nerezolvate) va genera în mod normal o eroare. Această opțiune o face
generează în schimb un avertisment.

--error-unresolved-simbols
Aceasta restabilește comportamentul implicit al linkerului de a genera erori atunci când raportează
simboluri nerezolvate.

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

Două note când utilizați această opțiune de la gcc: În primul rând, gcc nu știe despre această opțiune,
deci trebuie sa folosesti -Wl,-toată-arhiva. În al doilea rând, nu uitați să utilizați
-Wl,-nu-toată-arhivă după lista dvs. de arhive, deoarece gcc va adăuga propria listă
de arhive la linkul dvs. și este posibil să nu doriți ca acest semnal să le afecteze și pe acestea.

--wrap=simbol
Utilizați o funcție de ambalare pentru simbol. Orice referire nedefinită la simbol vor fi rezolvate
a încheia_simbol". Orice referință nedefinită la „__real_simbol" se va rezolva
simbol.

Acesta poate fi folosit pentru a oferi un înveliș pentru o funcție de sistem. Funcția de ambalare
ar trebui să se numească „__wrap_simbol". Dacă dorește să apeleze funcția de sistem, ar trebui
suna "__real_simbol".

Iată un exemplu banal:

nul *
__wrap_malloc (dimensiune_t c)
{
printf ("malloc numit cu %zu\n", c);
returnează __real_malloc (c);
}

Dacă legați alt cod cu acest fișier folosind --înfășurare malloc, apoi toate apelurile la „malloc”
va apela în schimb funcția „__wrap_malloc”. Apelul către „__real_malloc” în
„__wrap_malloc” va apela funcția reală „malloc”.

Poate doriți să furnizați și o funcție „__real_malloc”, astfel încât linkurile fără
--înfășurare opțiunea va reuși. Dacă faci asta, nu ar trebui să pui definiția
„__real_malloc” în același fișier ca „__wrap_malloc”; dacă o faci, asamblatorul poate
rezolvați apelul înainte ca linkerul să aibă șansa de a-l împacheta în „malloc”.

--eh-frame-hdr
Solicitați crearea secțiunii „.eh_frame_hdr” și a antetului segmentului ELF „PT_GNU_EH_FRAME”.

--no-ld-generated-unwind-info
Solicitați crearea informațiilor de derulare „.eh_frame” pentru secțiunile de cod generate de linker, cum ar fi
PLT. Această opțiune este activată în mod implicit dacă informațiile de derulare generate de linker sunt acceptate.

--enable-new-dtags
--disable-new-dtags
Acest linker poate crea noile etichete dinamice în ELF. Dar sistemele ELF mai vechi s-ar putea să nu
intelege-le. Daca specificati --enable-new-dtags, noile etichete dinamice vor fi
create după cum este necesar, iar etichetele dinamice mai vechi vor fi omise. Daca specificati
--disable-new-dtags, nu vor fi create etichete dinamice noi. Implicit, noua dinamică
etichetele nu sunt create. Rețineți că aceste opțiuni sunt disponibile numai pentru sistemele ELF.

--hash-size=număr
Setați dimensiunea implicită a tabelelor hash ale linkerului la un număr prim apropiat de număr.
Mărirea acestei valori poate reduce durata de timp necesară linkerului pentru a-și efectua
sarcini, în detrimentul creșterii cerințelor de memorie ale linkerului. În mod similar
reducerea acestei valori poate reduce cerințele de memorie în detrimentul vitezei.

--hash-style=stil
Setați tipul tabelelor hash ale linkerului. stil poate fi fie „sysv” pentru ELF clasic
Secțiunea „.hash”, „gnu” pentru stilul nou GNU, secțiunea „.gnu.hash” sau „ambele” pentru ambele
tabelele hash clasice ELF „.hash” și stil nou GNU „.gnu.hash”. Valoarea implicită este „sysv”.

--compress-debug-sections=niciuna
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
Pe platformele ELF, aceste opțiuni controlează modul în care se comprimă secțiunile de depanare DWARF
zlib. --compress-debug-sections=niciuna nu comprimă secțiunile de depanare DWARF.
--compress-debug-sections=zlib-gnu comprimă secțiunile de depanare DWARF și redenumește depanarea
numele secțiunilor pentru început .zdebug în loc de .depanare. --compress-debug-sections=zlib
și --compress-debug-sections=zlib-gabi comprimați secțiunile de depanare DWARF cu
SHF_COMPRESSED din ELF ABI. Comportamentul implicit variază în funcție de
ținta implicată și opțiunile de configurare utilizate pentru a construi lanțul de instrumente. Implicit
poate fi determinat prin examinarea ieșirii de la linker --Ajutor opțiune.

--reducere-de-memorie-overheads
Această opțiune reduce cerințele de memorie la ld runtime, în detrimentul conectării
viteză. Acesta a fost introdus pentru a selecta vechiul algoritm O(n^2) pentru fișierul cu hărți de legături
generație, mai degrabă decât noul algoritm O(n) care utilizează aproximativ 40% mai multă memorie pentru
stocarea simbolurilor.

Un alt efect al comutatorului este de a seta dimensiunea implicită a tabelului hash la 1021, care
economisește din nou memorie cu prețul prelungirii timpului de rulare al linkerului. Acest lucru nu se face
cu toate acestea, dacă --dimensiunea hash a fost folosit comutatorul.

--reducere-de-memorie-overheads comutatorul poate fi folosit și pentru a activa alte compromisuri
versiunile viitoare ale linkerului.

--build-id
--build-id=stil
Solicitați crearea unei secțiuni de note ELF „.note.gnu.build-id” sau a unui COFF „.buildid”
secțiune. Conținutul notei sunt 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 SHA160 de 1 de biți pe
părțile normative ale conținutului de ieșire, „md5” pentru a utiliza un hash MD128 de 5 de biți pe
părțile normative ale conținutului de ieșire sau „0xșnur hexagonal" pentru a utiliza un șir de biți ales
specificat ca un număr par de cifre hexazecimale ("-" și ":" caractere între
perechile de cifre sunt ignorate). Dacă stil este omis, se folosește „sha1”.

Stilurile „md5” și „sha1” produc un identificator care este întotdeauna același într-un
fișier de ieșire identic, dar va fi unic printre toate fișierele de ieșire neidentice. Este
nu este destinat să fie comparat ca o sumă de control pentru conținutul fișierului. Un fișier legat poate
fi schimbat mai târziu de alte instrumente, dar șirul de biți al ID-ului de construcție care identifică originalul
fișierul legat nu se modifică.

Trecând „niciunul” pentru stil dezactivează setarea din orice opțiuni „--build-id” de mai devreme
linia de comandă.

Linker-ul i386 PE acceptă -impartit opțiunea, care face ca rezultatul să fie a
bibliotecă legată dinamic (DLL) în loc de un executabil normal. Ar trebui să numiți
ieșiți „*.dll” când utilizați această opțiune. În plus, linkerul acceptă pe deplin
fișiere standard „*.def”, care pot fi specificate pe linia de comandă a linkerului ca un obiect
fișier (de fapt, ar trebui să precedă arhivele din care exportă simbolurile, pentru a se asigura că primesc
conectat, la fel ca un fișier obiect normal).

Pe lângă opțiunile comune tuturor țintelor, linkerul i386 PE acceptă suplimentar
opțiunile de linie de comandă care sunt specifice țintei i386 PE. Opțiuni care iau valori
pot fi separate de valorile lor fie printr-un spațiu, fie printr-un semn egal.

--add-stdcall-alias
Dacă sunt date, simboluri cu un sufix stdcall (@nn) va fi exportat ca atare și, de asemenea, cu
sufix dezbrăcat. [Această opțiune este specifică portului vizat i386 PE al linkerului]

--base-file fişier
Utilizare fişier ca numele unui fișier în care să salvați adresele de bază ale tuturor
relocari necesare pentru generarea de DLL-uri cu dlltool. [Acesta este un i386 PE specific
opțiune]

--dll
Creați un DLL în loc de un executabil obișnuit. De asemenea, puteți utiliza -impartit sau specificați a
„BIBLIOTECĂ” într-un fișier „.def” dat. [Această opțiune este specifică i386 PE vizat
portul linkerului]

--enable-long-section-names
--disable-long-section-names
Variantele PE ale formatului de obiect COFF adaugă o extensie care permite utilizarea
nume de secțiuni mai lungi de opt caractere, limita normală pentru COFF. În mod implicit,
aceste nume sunt permise numai în fișierele obiect, așa cum nu fac imaginile executabile complet legate
purtați tabelul de șiruri COFF necesar pentru a susține numele mai lungi. Ca extensie GNU,
este posibil să se permită utilizarea lor și în imagini executabile sau să (probabil
inutil!) interziceți-l în fișierele obiect, folosind aceste două opțiuni. Executabil
imaginile generate cu aceste nume de secțiuni lungi sunt ușor nestandard, purtând ca
fac un tabel cu șiruri și pot genera rezultate confuze atunci când sunt examinate cu non-GNU
Instrumente compatibile cu PE, cum ar fi vizualizatoare de fișiere și basculante. Cu toate acestea, GDB se bazează pe utilizarea
PE nume de secțiuni lungi pentru a găsi secțiuni de informații de depanare Dwarf-2 într-un executabil
imagine în timpul execuției și, deci, dacă nicio opțiune nu este specificată pe linia de comandă, ld voi
activați nume de secțiuni lungi, suprascriind comportamentul implicit și corect din punct de vedere tehnic,
când găsește prezența informațiilor de depanare în timp ce conectează o imagine executabilă și
nu dezlipirea simbolurilor. [Această opțiune este valabilă pentru toate porturile vizate PE ale linkerului]

--enable-stdcall-fixup
--disable-stdcall-fixup
Dacă linkul găsește un simbol pe care nu îl poate rezolva, va încerca să facă „fuzzy
linking" prin căutarea unui alt simbol definit care diferă doar prin formatul
numele simbolului (cdecl vs stdcall) și va rezolva acel simbol prin conectarea la potrivire.
De exemplu, simbolul nedefinit „_foo” poate fi legat de funcția „_foo@12” sau
simbolul nedefinit „_bar@16” ar putea fi legat de funcția „_bar”. Cand
linker face acest lucru, imprimă un avertisment, deoarece în mod normal ar fi trebuit să nu reușească să se conecteze,
dar, uneori, biblioteci de import generate de dll-uri terțe pot avea nevoie de această caracteristică
pentru a fi utilizabil. Daca specificati --enable-stdcall-fixup, această caracteristică este complet activată
iar avertismentele nu sunt tipărite. Daca specificati --disable-stdcall-fixup, această caracteristică este
dezactivate și astfel de nepotriviri sunt considerate erori. [Această opțiune este specifică
portul vizat i386 PE al linkerului]

--liding-subliniere
--fără-lide-subliniere
Pentru majoritatea țintelor, prefixul simbol implicit este un caracter de subliniere și este definit în ținte
Descriere. Prin această opțiune este posibil să dezactivați/activați caracterul de subliniere implicit
simbol-prefix.

--export-toate-simbolurile
Dacă sunt date, toate simbolurile globale din obiectele utilizate pentru a construi un DLL vor fi exportate de
DLL-ul. Rețineți că aceasta este valoarea implicită dacă altfel nu ar fi exportat
simboluri. Când simbolurile sunt exportate explicit prin fișiere DEF sau implicit exportate
prin atributele funcției, implicit este să nu exportați nimic altceva decât dacă această opțiune
este dată. 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, nici simbolurile care se specifică
aspectul intern al DLL-ului, cum ar fi cele care încep cu „_head_” sau care se termină cu
„_iname”. În plus, nu există simboluri de la „libgcc”, „libstd++”, „libmingw32” sau
„crtX.o” va fi exportat. Simboluri ale căror nume încep cu „__rtti_” sau „__builtin_”
nu va fi exportat, pentru a ajuta cu DLL-urile C++. În cele din urmă, există o listă extinsă de
simboluri cygwin-private care nu sunt exportate (evident, acest lucru se aplică la construirea
DLL-uri pentru ținte cygwin). Aceste cygwin-exclude 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ă i386 PE vizat
portul linkerului]

--exclude-simboluri simbol,simbol, ...
Specifică o listă de simboluri care nu ar trebui să fie exportate automat. Simbolul
numele pot fi delimitate prin virgule sau două puncte. [Această opțiune este specifică i386 PE
portul vizat al linkerului]

--exclude-toate-simbolurile
Specifică că niciun simbol nu trebuie exportat automat. [Această opțiune este specifică
portul vizat i386 PE al linkerului]

--file-alignment
Specificați alinierea fișierului. Secțiunile din fișier vor începe întotdeauna la decalajele fișierului
care sunt multipli ai acestui număr. Acesta este implicit 512. [Această opțiune este specifică
la portul vizat i386 PE al linkerului]

--morman rezervă
--morman rezervă,comite
Specificați numărul de octeți de memorie de rezervat (și opțional de comitere) pentru a fi utilizați
heap pentru acest program. Valoarea implicită este 1MB rezervat, 4K comis. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--bază-imagine valoare
Utilizare valoare ca adresa de bază a programului sau dll-ului dvs. Aceasta este cea mai scăzută memorie
locație care va fi folosită când programul sau dll-ul dvs. este încărcat. Pentru a reduce nevoia de a
mutați și îmbunătățiți performanța dll-urilor dvs., fiecare ar trebui să aibă o adresă de bază unică
și să nu se suprapună cu alte dll-uri. Valoarea implicită este 0x400000 pentru executabile și
0x10000000 pentru dll-uri. [Această opțiune este specifică portului vizat i386 PE al
linker]

--ucide-la
Dacă sunt date, sufixele stdcall (@nn) vor fi eliminate din simboluri înainte ca acestea să fie
exportate. [Această opțiune este specifică portului vizat i386 PE al linkerului]

--conștient-adresă-mare
Dacă este dat, bitul corespunzător din câmpul „Caracteristici” al antetului COFF este setat
pentru a indica faptul că acest executabil acceptă adrese virtuale mai mari de 2 gigaocteți.
Acesta ar trebui utilizat împreună cu /3GB sau /USERVA=valoare intră megaocteții
secțiunea „[sisteme de operare]” din BOOT.INI. În caz contrar, acest bit nu are efect.
[Această opțiune este specifică porturilor vizate PE ale linkerului]

--disable-large-address-aware
Intoarce efectul unui precedent --conștient-adresă-mare opțiune. Acest lucru este util dacă
--conștient-adresă-mare este întotdeauna setat de driverul compilatorului (de ex. Cygwin gcc) și
executabilul nu acceptă adrese virtuale mai mari de 2 gigaocteți. [Această opțiune
este specific porturilor vizate PE ale linkerului]

--major-image-version valoare
Setează numărul major al „versiunii de imagine”. Implicit la 1. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--major-os-version valoare
Setează numărul major al „versiunii os”. Implicit la 4. [Această opțiune este specifică
la portul vizat i386 PE al linkerului]

--versiune-subsistem-major valoare
Setează numărul major al „versiunii subsistemului”. Implicit la 4. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--versiune-imagine-minor valoare
Setează numărul minor al „versiunii de imagine”. Implicit la 0. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--minor-os-version valoare
Setează numărul minor al „versiunii os”. Implicit la 0. [Această opțiune este specifică
la portul vizat i386 PE al linkerului]

--versiune-subsistem-minor valoare
Setează numărul minor al „versiunii subsistemului”. Implicit la 0. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--ieșire-def fişier
Linkerul va crea fișierul fişier care va conţine un fişier DEF corespunzător
DLL-ul generat de linker. Acest fișier DEF (care ar trebui să fie numit „*.def”) poate
poate fi folosit pentru a crea o bibliotecă de import cu „dlltool” sau poate fi folosit ca referință la
simboluri exportate automat sau implicit. [Această opțiune este specifică i386 PE
portul vizat al linkerului]

--out-implib fişier
Linkerul va crea fișierul fişier care va conține o lib de import corespunzătoare
DLL-ul generat de linker. Această libră de import (care ar trebui să fie numită „*.dll.a” sau
„*.a” poate fi folosit pentru a lega clienții cu DLL-ul generat; acest comportament o face
este posibil să săriți peste un pas separat de creare a bibliotecii de import „dlltool”. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--enable-auto-image-base
--enable-auto-image-base=valoare
Alegeți automat baza de imagine pentru DLL-uri, începând opțional cu baza valoare,
cu excepția cazului în care se specifică una folosind argumentul „--image-base”. Prin utilizarea unui hash generat
din numele dll pentru a crea baze de imagini unice pentru fiecare DLL, coliziuni în memorie și
sunt evitate relocari care pot intarzia executia programului. [Această opțiune este specifică
la portul vizat i386 PE al linkerului]

--disable-auto-image-base
Nu generați automat o bază de imagini unică. Dacă nu există nicio specificație de utilizator
baza de imagini ("--image-base") apoi utilizați implicit platforma. [Această opțiune este specifică
la portul vizat i386 PE al linkerului]

--dll-search-prefix şir
Când conectați dinamic la un dll fără o bibliotecă de import, căutați
" .dll" de preferință față de "lib .dll". Acest comportament permite
distincție ușoară între DLL-urile construite pentru diferitele „subplatforme”: nativ, cygwin,
uwin, pw etc. De exemplu, DLL-urile cygwin folosesc de obicei „--dll-search-prefix=cyg”.
[Această opțiune este specifică portului vizat i386 PE al linkerului]

--enable-auto-import
Faceți legături sofisticate de „_symbol” la „__imp__symbol” pentru importurile de DATE din DLL-uri,
și creați simbolurile necesare atunci când construiți bibliotecile de import cu
acele exporturi de DATE. Notă: Utilizarea extensiei „import automat” va genera textul
secțiunea fișierului imagine care urmează să fie scrisă. Acest lucru nu este conform cu PE-COFF
specificație de format publicată de Microsoft.

Notă - utilizarea extensiei „import automat” va determina, de asemenea, date numai în citire, ceea ce ar face
în mod normal, să fie plasat în secțiunea .rdata pentru a fi plasat în secțiunea .data
in schimb. Acest lucru este pentru a rezolva o problemă cu const. care este descrisă
aici: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

În general, folosirea „import automat” va „funcționa” -- dar uneori este posibil să vedeți acest lucru
mesaj:

„variabila „ ” nu poate fi importată automat. Vă rugăm să citiți documentația pentru ld
„--enable-auto-import” pentru detalii.”

Acest mesaj apare atunci când o (sub)expresie accesează o adresă dată în cele din urmă de
suma a două constante (tabelele de import Win32 permit doar una). Instanțe în care aceasta
pot apărea includ accese la câmpurile membre ale variabilelor struct importate dintr-un DLL,
precum și utilizarea unui index constant într-o variabilă matrice importată dintr-un DLL. Orice
variabila cu mai multe cuvinte (matrice, structuri, lung lung etc.) poate declanșa această condiție de eroare.
Cu toate acestea, indiferent de tipul exact de date al variabilei exportate infracționale, ld va
detectează-l întotdeauna, emite avertismentul și ieși.

Există mai multe moduri de a aborda această dificultate, indiferent de tipul de date al
variabila exportata:

O modalitate este să utilizați comutatorul --enable-runtime-pseudo-reloc. Aceasta lasă sarcina de a
ajustarea referințelor din codul clientului pentru mediul de rulare, astfel încât această metodă funcționează
numai atunci când mediul de rulare acceptă această caracteristică.

O a doua soluție este de a forța una dintre „constante” să fie o variabilă - adică
necunoscut și neoptimizabil la momentul compilării. Pentru matrice, există două posibilități:
a) faceți din indexat (adresa matricei) o variabilă sau b) faceți indexul „constant”
o variabilă. Prin urmare:

tip extern extern_array[];
extern_array[1] -->
{ tip volatil *t=extern_array; t[1] }

or

tip extern extern_array[];
extern_array[1] -->
{ volatile int t=1; extern_array[t] }

Pentru structurile (și majoritatea celorlalte tipuri de date cu mai multe cuvinte) singura opțiune este să creați
struct-ul în sine (sau long long, sau ...) variabila:

extern struct s extern_struct;
extern_struct.field -->
{ volatile struct s *t=&extern_struct; t->câmp }

or

extern long long extern_ll;
extern_ll -->
{ volatile long long * local_ll=&extern_ll; *local_ll }

O a treia metodă de a face față acestei dificultăți este abandonarea „importului automat” pentru
simbolul ofensator și marcați-l cu „__declspec(dllimport)”. Cu toate acestea, în practică că
necesită utilizarea timpului de compilare #defines pentru a indica dacă construiți un DLL,
construirea unui cod de client care se va conecta la DLL, sau doar construirea/conectarea la un static
bibliotecă. În efectuarea alegerii între diferitele metode de rezolvare a „direct
adresa cu problema de compensare constantă, ar trebui să luați î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ție 1:

--foo.h
extern int arr[];
--foo.c
#include „foo.h”
void main(int argc, char **argv){
/* Această soluție este pentru win32 și cygwin; nu "optimiza" */
volatile int *parr = arr;
printf("%d\n",parr[1]);
}

Soluție 2:

--foo.h
/* Notă: se presupune că auto-export (fără __declspec(dllexport)) */
#if (definit(_WIN32) || definit(__CYGWIN__)) && \
!(definit(FOO_BUILD_DLL) || definit(FOO_STATIC))
#define FOO_IMPORT __declspec(dllimport)
#altfel
#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 să recodificați biblioteca pentru a utiliza un funcțional
interfață mai degrabă decât o interfață de date pentru variabilele ofensatoare (de ex set_foo() și
get_foo() funcții accesorii). [Această opțiune este specifică portului vizat i386 PE
al linkerului]

--disable-auto-import
Nu încercați să faceți legături sofisticate de „_symbol” la „__imp__symbol” pentru DATE
importuri din DLL-uri. [Această opțiune este specifică portului vizat i386 PE al
linker]

--enable-runtime-pseudo-reloc
Dacă codul dvs. conține expresii descrise în secțiunea --enable-auto-import, adică
Importurile de DATE din DLL cu offset diferit de zero, acest comutator va crea un vector de
„pseudo relocari de rulare” care pot fi utilizate de mediul de rulare pentru a ajusta
referințe la astfel de date în codul dvs. de client. [Această opțiune este specifică i386 PE
portul vizat al linkerului]

--disable-runtime-pseudo-reloc
Nu creați pseudo-relocari pentru importurile de DATE cu compensare diferită de zero din DLL-uri. [Acest
opțiunea este specifică portului vizat i386 PE al linkerului]

--enable-extra-pe-debug
Afișați informații suplimentare de depanare legate de importarea automată a simbolurilor. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--alinierea-secțiunii
Setează alinierea secțiunii. Secțiunile din memorie vor începe întotdeauna la adresele care
sunt multiplu ale acestui număr. Implicit la 0x1000. [Această opțiune este specifică
i386 PE portul vizat al linkerului]

--grămadă rezervă
--grămadă rezervă,comite
Specificați numărul de octeți de memorie de rezervat (și opțional de comitere) pentru a fi utilizați
stivă pentru acest program. Valoarea implicită este 2MB rezervat, 4K comis. [Această opțiune este
specific portului vizat i386 PE al linkerului]

--subsistem care
--subsistem care:major
--subsistem care:major.minor
Specifică subsistemul sub care se va executa programul. Valorile legale pentru
care sunt „native”, „windows”, „console”, „posix” și „xbox”. Puteți seta opțional
de asemenea, versiunea subsistemului. Sunt acceptate și valorile numerice pentru care. [Această opțiune
este specific portului vizat i386 PE al linkerului]

Următoarele opțiuni setează steaguri în câmpul „DllCharacteristics” al fișierului PE
antet: [Aceste opțiuni sunt specifice porturilor vizate PE ale linkerului]

--high-entropie-va
Imaginea este compatibilă cu randomizarea spațiului de adrese pe 64 de biți (ASLR).

--dynamicbase
Adresa de bază a imaginii poate fi relocată utilizând randomizarea aspectului spațiului de adrese
(ASLR). Această caracteristică a fost introdusă cu MS Windows Vista pentru ținte i386 PE.

--forceinteg
Verificările integrității codului sunt aplicate.

--nxcompat
Imaginea este compatibilă cu Data Execution Prevention. Această caracteristică a fost
introdus cu MS Windows XP SP2 pentru ținte i386 PE.

--fara-izolare
Deși imaginea înțelege izolarea, nu izolați imaginea.

--nu-seh
Imaginea nu folosește SEH. Niciun handler SE nu poate fi apelat din această imagine.

--nu-leagă
Nu legați această imagine.

--wdmdriver
Driverul folosește modelul de driver MS Windows.

--tsaware
Imaginea este conștientă de Terminal Server.

--insert-timestamp
--no-insert-timestamp
Introduceți un marcaj de timp real în imagine. Acesta este comportamentul implicit, așa cum se potrivește
cod moștenit și înseamnă că imaginea va funcționa cu alte instrumente proprietare. The
problema cu această implicită este că va avea ca rezultat imagini ușor diferite
produse de fiecare dată când se leagă aceleași surse. Optiunea --no-insert-timestamp poate să
poate fi folosit pentru a insera o valoare zero pentru marca temporală, asigurându-se astfel că binarele produse
din surse identice se vor compara identic.

Ținta C6X uClinux folosește un format binar numit DSBT pentru a suporta biblioteci partajate. Fiecare
biblioteca partajată în sistem trebuie să aibă un index unic; toate executabilele folosesc un index de
0.

--dsbt-size mărimea
Această opțiune setează numărul de intrări în DSBT al executabilului curent sau partajat
bibliotecă la mărimea. Implicit este crearea unui tabel cu 64 de intrări.

--dsbt-index index
Această opțiune setează indexul DSBT al bibliotecii curente executabile sau partajate la index.
Valoarea implicită este 0, care este adecvată pentru generarea de executabile. Dacă o partajată
biblioteca este generată cu un index DSBT de 0, relocurile „R_C6000_DSBT_INDEX” sunt
copiat în fișierul de ieșire.

--no-merge-exidx-entries comutatorul dezactivează îmbinarea intrărilor exidx adiacente în
informații despre derularea cadrului.

Linkerele 68HC11 și 68HC12 acceptă opțiuni specifice pentru a controla banca de memorie
cartografierea comutării și generarea codului de trambulină.

--fara-trambulina
Această opțiune dezactivează generarea trambulinei. Implicit o trambulina este
generată pentru fiecare funcție departe care este apelată folosind o instrucțiune „jsr” (acest
se întâmplă atunci când este luat un pointer către o funcție îndepărtată).

--fereastră-bancă nume
Această opțiune indică linkerului numele regiunii de memorie din MEMORIE
specificație care descrie fereastra băncii de memorie. Definiția unei astfel de regiuni este
apoi folosit de linker pentru a calcula paginarea și adresele în fereastra de memorie.

Următoarele opțiuni sunt acceptate pentru a controla gestionarea generării GOT la conectarea pentru
68 ținte.

--am=tip
Această opțiune îi spune linkerului ce schemă de generare GOT să folosească. tip ar trebui să fie unul
of singur, negativ, multigot or ţintă. Pentru mai multe informații, consultați intrarea Informații
pentru ld.

Următoarele opțiuni sunt acceptate pentru a controla generarea de instrucțiuni microMIPS când
legături pentru ținte MIPS.

--insn32
--no-insn32
Aceste opțiuni controlează alegerea instrucțiunilor microMIPS utilizate în codul generat de
linkerul, cum ar fi cel din PLT sau cioturile de legare leneșă, sau în relaxare. Dacă
--insn32 este utilizat, atunci linker-ul folosește doar codificări de instrucțiuni pe 32 de biți. În mod implicit
sau daca --no-insn32 este utilizată, sunt folosite toate codificările instrucțiunilor, inclusiv cele pe 16 biți
acolo unde este posibil.

MEDIUL


Puteți schimba comportamentul ld cu variabilele de mediu „GNUTARGET”,
„LDEMULATION” și „COLLECT_NO_DEMANGLE”.

„GNUTARGET” determină formatul obiectului fișierului de intrare dacă nu îl utilizați -b (sau sinonimul acestuia
--format). Valoarea sa ar trebui să fie unul dintre numele BFD pentru un format de intrare. Dacă nu există
„GNUTARGET” în mediu, ld folosește formatul natural al țintei. Dacă „GNUTARGET”
este setat la „implicit”, apoi BFD încearcă să descopere formatul de intrare examinând binarul
fișiere de intrare; această metodă reușește adesea, dar există potențiale ambiguități, deoarece acolo
nu este o metodă de a se asigura că numărul magic folosit pentru a specifica formatele obiect-fișier este
unic. Cu toate acestea, procedura de configurare pentru BFD pe fiecare sistem plasează
format convențional pentru acel sistem primul în lista de căutare, astfel încât ambiguitățile sunt rezolvate
în favoarea convenţiei.

„LDEMULATION” determină emularea implicită dacă nu utilizați -m opțiune.
emularea poate afecta diferite aspecte ale comportamentului linkerului, în special linker-ul implicit
scenariu. Puteți enumera emulațiile disponibile cu ajutorul --verbos or -V Opțiuni. Dacă
-m opțiunea nu este utilizată, iar variabila de mediu „LDEMULATION” nu este definită
emularea implicită depinde de modul în care a fost configurat linkerul.

În mod normal, linkerul va desfășura implicit simbolurile. Cu toate acestea, dacă
„COLLECT_NO_DEMANGLE” este setat în mediu, apoi se va desfășura implicit
simboluri. Această variabilă de mediu este utilizată într-un mod similar de către linkerul „gcc”.
program de ambalare. Valoarea implicită poate fi înlocuită de --descurca și --nu-demangle
opțiuni.

Utilizați mips64el-linux-gnuabi64-ld online folosind serviciile onworks.net


Ad


Ad

Cele mai recente programe online Linux și Windows