Aceasta este comanda i686-linux-gnu-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 obiect și arhivă, relocați datele acestora
și leagă referințe de simbol. De obicei, ultimul pas în compilarea a
programul urmează să ruleze ld.
ld acceptă fișierele Linker Command Language scrise într-un superset de
Sintaxa AT&T Link Editor Command Language, pentru a furniza explicit și
control total asupra procesului de conectare.
Această pagină de manual nu descrie limbajul de comandă; vezi ld intrare
în „info” pentru detalii complete despre limbajul de comandă și despre alte aspecte
al linkerului GNU.
Această versiune a ld folosește bibliotecile BFD de uz general pentru a opera
fișiere obiect. Asta permite ld pentru a citi, combina și scrie fișiere obiect
în multe formate diferite --- de exemplu, COFF sau „a.out”. Diferit
formatele pot fi legate între ele pentru a produce orice tip de obiect disponibil
fișier.
Pe lângă flexibilitatea sa, linkerul GNU este mai util decât altul
linkerii în furnizarea de informații de diagnostic. Mulți linkeri abandonează
execuție imediat după întâmpinarea unei erori; ori de câte ori este posibil, ld
continuă să se execute, 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ă
să fie cât mai compatibil cu alți linkeri. Ca rezultat, ai
multe opțiuni pentru a-și controla comportamentul.
OPŢIUNI
Linkerul acceptă o multitudine de opțiuni de linie de comandă, dar în realitate
practică puține dintre ele sunt folosite într-un anumit context. De exemplu,
o utilizare frecventă a ld este de a lega fișierele obiect standard Unix pe un
sistem Unix standard, suportat. Pe un astfel de sistem, pentru a lega un fișier
"bună ziua.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 legăturii
fișierul „/lib/crt0.o” cu „hello.o” și biblioteca „libc.a”, care
va veni din directoarele de căutare standard. (Vezi discuția despre
il -l opțiunea de mai jos.)
Unele dintre opțiunile din linia de comandă la ld poate fi specificat în orice moment în
linia de comandă. Cu toate acestea, opțiunile care se referă la fișiere, cum ar fi -l or
-T, face ca fișierul să fie citit în punctul în care apare opțiunea
în linia de comandă, în raport cu fișierele obiect și alte fișiere
Opțiuni. Repetarea opțiunilor non-fișier cu un argument diferit va
fie nu au niciun efect suplimentar, fie anulează aparițiile anterioare (cele
mai la stânga pe linia de comandă) a opțiunii respective. Opțiuni 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. Ele pot urma, precede sau pot fi amestecate cu acestea
opțiunile din linia de comandă, cu excepția faptului că un argument de fișier obiect poate să nu fie
plasat între o opțiune și argumentul acesteia.
De obicei linker-ul este invocat cu cel puțin un fișier obiect, dar tu
poate specifica alte forme de fișiere binare de intrare folosind -l, -R, Şi
limbaj de comandă de script. Dacă Nu. fișierele de intrare binare sunt deloc
specificat, 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, o va face
presupunem că este un script linker. Un script specificat în acest fel
mărește scriptul principal de linker utilizat pentru link (fie cel implicit
script-ul linker sau cel specificat prin utilizarea -T). Această caracteristică permite
linker-ul să facă legătura cu un fișier care pare a fi un obiect sau un
arhivă, dar de fapt definește doar unele valori de simbol sau utilizări
„INPUT” sau „GROUP” pentru a încărca alte obiecte. Specificarea unui script în aceasta
modul pur și simplu mărește scriptul principal de linker, cu comenzi suplimentare
plasat după scenariul principal; folosește -T opțiunea de înlocuire a implicită
scriptul 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 urmați litera de opțiune fără a interveni spații albe, fie fiți
date ca argumente separate imediat după opţiunea care
le cere.
Pentru opțiunile ale căror nume sunt mai multe litere, fie o liniuță, fie două
poate precede numele opțiunii; de exemplu, -urmă-simbol și
--simbol-urmă sunt echivalente. Notă --- există o excepție de la aceasta
regulă. Opțiuni cu mai multe litere care încep cu „o” minuscul
să fie precedată doar de două liniuțe. Acest lucru este pentru a reduce confuzia cu
-o opțiune. Deci de exemplu -omagic setează numele fișierului de ieșire la magie
întrucât - Imagine setează indicatorul NMAGIC pe ieșire.
Argumentele la opțiunile cu mai multe litere trebuie fie separate de
denumirea opțiunii printr-un semn egal sau date ca argumente separate
imediat urmand varianta care le impune. De exemplu,
--simbol-urmă foo și --trace-symbol=foo sunt echivalente. Unic
sunt acceptate abrevierile denumirilor opțiunilor cu mai multe litere.
Notă --- dacă linkerul este invocat indirect, printr-un driver de compilator
(de exemplu gcc), atunci toate opțiunile liniei de comandă ale linkerului ar trebui să fie prefixate
by -Wl, (sau orice este potrivit pentru un anumit driver de compilator)
asa:
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
Aruncă în tăcere opțiunile de linker, rezultând un link prost. Confuzie
poate apărea și la trecerea opțiunilor care necesită valori prin a
driver, deoarece utilizarea unui spațiu între opțiune și argument acționează ca a
separator și determină șoferul să treacă numai opțiunea către linker
și argumentul către compilator. În acest caz, este cel mai simplu de utilizat
formele unite ale opțiunilor cu o singură literă și mai multe, 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
Linker GNU:
@fişier
Citiți opțiunile din linia de comandă din fişier. Sunt introduse opțiunile citite
în locul originalului @fişier opțiune. Dacă fişier nu există, sau
nu poate fi citit, atunci opțiunea va fi tratată literal, și nu
îndepărtat.
Opțiuni în fişier sunt separate prin spații albe. Un spațiu alb
caracterul poate fi inclus într-o opțiune prin înconjurarea întregului
opțiunea fie între ghilimele simple, fie duble. Orice personaj (inclusiv
o bară oblică inversă) poate fi inclusă prin prefixarea caracterului care urmează să fie
incluse cu o bară oblică inversă. The fişier poate conține în sine suplimentar
@fiş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 șiruri Arhiva, comun, lipsă.
-o arhivă este echivalent din punct de vedere funcțional cu -Bstatic, iar celelalte două
cuvintele cheie sunt echivalente din punct de vedere funcțional cu -Bdinamic. Această opțiune poate
să fie 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ă de interfețe de audit, separată de două puncte
a folosi. Dacă linkerul găsește un obiect cu o intrare de audit while
căutând biblioteci partajate, va adăuga un corespunzătoare
Intrarea „DT_DEPAUDIT” în fișierul de ieșire. Această opțiune este numai
semnificativ 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 de arhitecturi Intel 960. In aceea ld configurație,
arhitectură argument identifică arhitectura particulară în
familia 960, permițând unele garanții și modificând arhiva-
calea de căutare a bibliotecii.
Lansări viitoare ale ld poate suporta funcționalități similare pentru altele
familii de arhitecturi.
-b formatul de intrare
--format=formatul de intrare
ld poate fi configurat pentru a suporta mai mult de un fel de fișier obiect.
Dacă dvs. ld este configurat astfel, puteți utiliza -b opțiunea pentru
specificați formatul binar pentru fișierele obiect de intrare care urmează
opțiunea de pe linia de comandă. Chiar și când ld este configurat pentru a suporta
formate alternative de obiecte, de obicei nu trebuie să specificați acest lucru,
as ld ar trebui configurat pentru a aștepta ca format de intrare implicit
cel mai obișnuit format de pe fiecare mașină. formatul de intrare este un șir de text,
numele unui anumit format acceptat de bibliotecile BFD.
(Puteți lista formatele binare disponibile cu objdump -i.)
Poate doriți să utilizați această opțiune dacă conectați fișiere cu un
format binar neobișnuit. De asemenea, puteți utiliza -b pentru a schimba formatele
explicit (când se leagă fișiere obiect de diferite formate), de
inclusiv -b formatul de intrare înaintea fiecărui grup de fișiere obiect din a
format anume.
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ă scriptul
fișiere scrise într-un limbaj alternativ de comandă restricționat,
descrise în secțiunea Fișiere script compatibile cu RMN din GNU ld
documentație. 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 limbaj de scripting. Dacă RMN-cmdfile nu exista, ld cauta
aceasta în directoarele specificate de oricare -L opțiuni.
-d
-DC
-dp Aceste trei opțiuni sunt echivalente; sunt acceptate mai multe forme
pentru compatibilitate cu alți linkeri. Ei atribuie spațiu comunului
simboluri chiar dacă este specificat un fișier de ieșire relocabil (cu -r).
Comanda de script „FORCE_COMMON_ALLOCATION” are același 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ă este 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
suportând interfața rtld-audit. Opțiunea -P este prevăzută
Compatibilitate Solaris.
-e intrare
--intrare=intrare
Utilizare intrare ca simbol explicit pentru începerea execuției dvs
program, mai degrabă decât punctul de intrare implicit. Dacă nu există
simbol numit intrare, linkerul va încerca să analizeze intrare ca număr,
și utilizați-o 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
fi exportat automat. Numele bibliotecii pot fi delimitate de
virgule sau două puncte. Specificarea „--exclude-libs ALL” exclude simbolurile
în toate bibliotecile de arhivă de la export automat. Această opțiune este
disponibil numai pentru portul vizat i386 PE al linkerului și pentru
Porturile vizate de ELF. Pentru i386 PE, simbolurile enumerate explicit în a
Fișierele .def sunt încă exportate, indiferent de această opțiune. Pentru ELF
porturile vizate, simbolurile afectate de această opțiune vor fi tratate 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ă fie exportate automat, dar care ar trebui să fie
copiat angro în biblioteca de import fiind generat în timpul
legătură. Numele modulelor pot fi delimitate prin virgule sau două puncte și
trebuie să se potrivească exact cu numele de fișiere utilizate de ld pentru a deschide fișierele; pentru
membrii arhivei, acesta este pur și simplu numele membrului, dar pentru obiect
fișierele pe care numele listat trebuie să includă și să se potrivească exact cu orice cale
folosit pentru a specifica fișierul de intrare pe linia de comandă a linkerului. Acest
opțiunea 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 opțiune
sau --export-dinamic opțiunea face linkerul să adauge toate simbolurile
la tabelul de simboluri dinamice. Tabelul de simboluri dinamice este setul
de simboluri care sunt vizibile de la obiectele dinamice în timpul rulării.
Dacă nu utilizați niciuna dintre aceste opțiuni (sau utilizați
--fără-export-dinamic opțiunea de a restabili comportamentul implicit), the
tabelul de simboluri dinamice va conține în mod normal doar acele simboluri care
sunt referite de un obiect dinamic menționat în link.
Dacă utilizați „dlopen” pentru a încărca un obiect dinamic care trebuie să se refere
înapoi la simbolurile definite de program, mai degrabă decât la altele
obiect dinamic, atunci probabil că va trebui să utilizați această opțiune când
legând programul în sine.
De asemenea, puteți utiliza lista dinamică pentru a controla ce simboluri ar trebui să fie
adăugat la tabelul 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. PE
țintele acceptă o funcție similară 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.
-CE Conectați obiecte little-endian. Acest lucru afectează ieșirea implicită
format.
-f nume
--auxiliar=nume
Când creați un obiect partajat ELF, setați DT_AUXILIARY intern
câmp la numele specificat. Acest lucru îi spune linkerului dinamic că
tabelul de simboluri al obiectului partajat ar trebui folosit ca un
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 programul, linkerul dinamic va vedea DT_AUXILIARY
camp. Dacă linkerul dinamic rezolvă orice simboluri din filtru
obiect, va verifica mai întâi dacă există o definiție în
obiect comun nume. Dacă există unul, acesta va fi folosit în loc de
definiția din obiectul filtru. Obiectul comun nume nevoie
nu exista. Astfel obiectul comun nume poate fi folosit pentru a oferi un
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. DT_AUXILIARY
intrările vor fi create în ordinea în care apar pe
Linie de comanda.
-F nume
--filtru=nume
Când creați un obiect partajat ELF, setați DT_FILTER intern
câmp la numele specificat. Acest lucru îi spune linkerului dinamic că
tabelul de simboluri al obiectului partajat care este creat 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 programul, linkerul dinamic va vedea DT_FILTER
camp. Linkerul dinamic va rezolva simbolurile conform
tabelul de simboluri al obiectului filtru ca de obicei, dar de fapt va fi
link la definițiile găsite în obiectul partajat nume. Astfel
obiectul filtru poate fi folosit pentru a selecta un subset de simboluri
furnizate de obiect nume.
Unii linkeri mai vechi au folosit -F opțiune pe parcursul unei compilații
lanț de instrumente pentru specificarea formatului de fișier obiect atât pentru intrare, cât și
fișiere obiect de ieșire. Linkerul GNU folosește alte mecanisme pentru aceasta
scop: cel -b, --format, --oformat opțiuni, comanda „TARGET”.
în scripturile de linker și variabila de mediu „GNUTARGET”. The
Linkerul GNU va ignora -F opțiune când nu se creează un ELF
obiect comun.
-fini=nume
Când creați un executabil ELF sau un obiect partajat, apelați NAME când
obiectul executabil sau partajat este descărcat, prin setarea DT_FINI la
adresa functiei. În mod 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 GP
inregistreaza-te la mărimea. Acest lucru are sens numai pentru formatele de fișiere obiect
cum ar fi MIPS ELF care suportă punerea în obiecte mari și mici
diferite secțiuni. Acest lucru este ignorat pentru alte formate de fișiere obiect.
-h nume
-sonam=nume
Când creați un obiect partajat ELF, setați DT_SONAME intern
câmp la numele specificat. Când un executabil este legat cu un
obiect partajat care are un câmp DT_SONAME, apoi atunci când executabilul
este rulat, linkerul dinamic va încerca să încarce obiectul partajat
specificat de câmpul DT_SONAME, mai degrabă decât de utilizarea fișierului
numele dat linkerului.
-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
obiectul executabil sau partajat este încărcat, setând DT_INIT la
adresa functiei. În mod implicit, linkerul folosește „_init”
ca funcție de apelat.
-l NONEPEC.
--biblioteca=NONEPEC.
Adăugați arhiva sau fișierul obiect specificat de NONEPEC. la lista de
fișiere de conectat. Această opțiune poate fi folosită de orice număr. Dacă
NONEPEC. este de forma :nume de fișier, ld va căuta calea bibliotecii
pentru un fișier numit nume de fișier, altfel va căuta în bibliotecă
cale pentru un fișier numit libnamespec.a.
Pe sistemele care acceptă biblioteci partajate, ld poate căuta, de asemenea
alte fișiere decât libnamespec.a. Mai exact, pe ELF și SunOS
sisteme, ld va căuta într-un director o bibliotecă numită
libnamespec.so înainte de a căuta un apelat libnamespec.a. (De
convenție, o extensie „.so” indică o bibliotecă partajată.) Notă
la care acest comportament nu se aplică :nume de fișier, care întotdeauna
specifică un fișier numit nume de fișier.
Linkerul va căuta într-o arhivă o singură dată, în locația în care
este specificat pe linia de comandă. Dacă arhiva definește a
simbol care a fost nedefinit într-un obiect care a apărut înainte de
arhiva pe linia de comandă, linker-ul va include
fișier(e) adecvat(e) din arhivă. Cu toate acestea, un simbol nedefinit
într-un obiect care apare mai târziu pe linia de comandă nu va provoca
linker pentru a căuta din nou în arhivă.
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.
Cu toate acestea, dacă utilizați ld pe AIX, rețineți că este diferit de
comportamentul linkerului 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
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 implicită
directoare. Toate -L opțiunile se aplică tuturor -l opțiuni, indiferent de
ordinea în care apar opțiunile. -L opțiunile nu afectează
cum ld caută un script de linker, cu excepția cazului în care -T este specificată opțiunea.
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 modul de emulare ld folosește și, în unele cazuri, de asemenea
despre modul în care a fost configurat.
Căile pot fi, de asemenea, specificate într-un script de legătură cu
Comanda „SEARCH_DIR”. Directoarele specificate în acest mod sunt căutate
în punctul în care apare scriptul linker în comandă
linia.
-m emulație
Emulați emulație linker. Puteți enumera cele disponibile
emulări cu --verbos or -V opțiuni.
În cazul în care -m opțiunea nu este utilizată, emularea este preluată din
Variabila de mediu „LDEMULATION”, dacă aceasta este definită.
În caz contrar, emularea implicită depinde de modul în care a fost linkerul
configurat.
-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
simbol care a determinat aducerea membrului arhivei.
· Valorile atribuite simbolurilor.
Notă - simboluri ale căror valori sunt calculate printr-o expresie care
implică o referire la o valoare anterioară a aceluiași simbol mai
nu au rezultatul corect afișat în harta linkului. Aceasta este
deoarece linkerul renunță la rezultatele intermediare și numai
păstrează valoarea finală a unei expresii. Sub asemenea
circumstanțe linkerul va afișa valoarea finală inclusă
prin paranteze drepte. Astfel, de exemplu, un script linker
conținând:
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 în
scripturi de linker.
-n
--nmagic
Dezactivați alinierea paginilor secțiunilor și dezactivați legarea împotriva
biblioteci partajate. Dacă formatul de ieșire acceptă magia în stil Unix
numere, marcați rezultatul ca „NMAGIC”.
-N
- Imagine
Setați secțiunile de text și date pentru a putea fi citite și scrise. De asemenea,
nu aliniați pagina segmentului de date și dezactivați linkul împotriva
biblioteci partajate. Dacă formatul de ieșire acceptă magia în stil Unix
numere, marcați rezultatul ca „OMAGIC”. Notă: Deși poate fi scris
secțiunea de text este permisă pentru ținte PE-COFF, nu este conformă
specificația de format publicată de Microsoft.
--fără-omagic
Această opțiune anulează majoritatea efectelor -N opțiune. Se fixează
secțiunea de text să fie doar în citire și forțează segmentul de date să fie
aliniat la pagină. Notă - această opțiune nu activează conectarea împotriva
biblioteci partajate. Utilizare -Bdinamic pentru asta.
-o producție
--ieșire=producție
Utilizare producție ca nume pentru programul produs de ld; dacă aceasta
opțiunea nu este specificată, numele a.out este folosit implicit. The
Comanda de script „OUTPUT” poate specifica și numele fișierului de ieșire.
-O nivel
If nivel este o valoare numerică mai mare decât zero ld optimizează
ieșire. Acest lucru ar putea dura mult mai mult și, prin urmare
probabil că ar trebui să fie activat doar pentru binarul final. La
moment în care această opțiune afectează doar generarea de biblioteci partajate ELF.
Versiunile viitoare ale linkerului pot folosi mai mult această opțiune.
De asemenea, în prezent, nu există nicio diferență în comportamentul linkerului pentru
diferite valori diferite de zero ale acestei opțiuni. Din nou, acest lucru se poate schimba
cu lansări viitoare.
--stare-împingere
--stare-împingere permite păstrarea stării actuale a steagurilor
care guvernează gestionarea fișierelor de intrare astfel încât să poată fi toate
restaurat 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
folosit cu --libs opțiunea toate bibliotecile posibil necesare sunt
listat și apoi posibil legat cu tot timpul. Este mai bine să
returnează 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
steagurile care guvernează gestionarea fișierelor de intrare.
-q
--emit-relocs
Lăsați secțiunile și conținutul de relocare în executabile complet conectate.
Este posibil ca instrumentele de analiză și optimizare post link să aibă nevoie de aceste informații
pentru a efectua modificări corecte ale executabilelor. Acest
rezultă în 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
specifice țintelor VxWorks.
-r
--relocabil
Generați ieșire relocabilă --- 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ă standard
Numerele magice Unix, această opțiune setează și magia fișierului de ieșire
numărul la „OMAGIC”. Dacă această opțiune nu este specificată, un absolut
fișierul este produs. Când conectați programe C++, această opțiune voi nu
rezolva referințe la constructori; pentru a face asta, folosește -Ur.
Când un fișier de intrare nu are același format ca ieșirea
fișier, legarea parțială este acceptată numai dacă acel fișier de intrare nu este acceptat
conțin orice relocare. Diferite formate de ieșire pot avea mai multe
restricții; de exemplu, unele formate bazate pe „a.out” nu acceptă
legături parțiale 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 să nu
mutați-l sau includeți-l în ieșire. Acest lucru vă permite ieșirea
fișier pentru a se referi simbolic la locațiile absolute ale memoriei definite
în alte programe. Puteți utiliza această opțiune de mai multe ori.
Pentru compatibilitate cu alte linkere ELF, dacă -R opțiunea este
urmat de un nume de director, mai degrabă decât de un nume de fișier, este
tratată ca fiind -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
fisier de iesire.
-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 ld's
script de linker implicit (mai degrabă decât adăugarea la acesta), deci fişierul de comandă
trebuie să specifice tot ceea ce este necesar pentru a descrie fișierul de ieșire.
If fişier script nu există în directorul curent, arată „ld”.
pentru aceasta î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ă restul
linia de comandă a fost procesată. Acest lucru permite opțiunile plasate după
il --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ă a linkerului nu poate fi controlată direct de utilizator. (de exemplu
deoarece linia de comandă este construită de un alt instrument, cum ar fi
as gcc).
-u simbol
--nedefinit=simbol
Forţarea simbol pentru a fi introdus în fișierul de ieșire ca nedefinit
simbol. Făcând acest lucru, de exemplu, poate declanșa conectarea unor elemente suplimentare
module din biblioteci standard. -u poate fi repetat cu diferite
argumente opțiuni pentru a introduce simboluri suplimentare nedefinite. Acest
opțiunea este echivalentă cu comanda de script de linker „EXTERN”.
Dacă această opțiune este folosită pentru a forța module suplimentare să fie
tras în link, iar dacă simbolul este o eroare
rămâne nedefinit, apoi opțiunea --necesită-definită ar trebui folosit
in schimb.
--require-defined=simbol
Solicita asta simbol este definit în fișierul de ieșire. Această opțiune este
la fel ca și opțiunea --nedefinit cu excepţia faptului că dacă simbol nu este definit
în fișierul de ieșire, atunci linkerul va emite o eroare și va ieși.
Același efect poate fi obținut într-un script de linker prin utilizarea
„EXTERN”, „ASSERT” și „DEFINED” împreună. Această opțiune poate fi folosită
de mai multe 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
servesc la rândul lor ca intrare la ld. Când conectați programe C++, -Ur face
rezolva referințe la constructori, spre deosebire de -r. Nu merge să
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 ultima 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ă este una
nu este menționat în mod specific î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 strategia descrisă în Orfan Secţiuni.
opțiune --unic afectează și modul în care sunt plasate secțiunile.
"arunca"
Toate secțiunile orfane sunt aruncate, prin plasarea lor în
/ALTARE/ secţiune.
"a avertiza"
Linkerul va plasa secțiunea orfană ca pentru „loc” și
emit de asemenea un avertisment.
"eroare"
Linker-ul se va închide cu o eroare dacă există vreo secțiune orfană
găsite.
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ă jokerul opțional SECȚIUNEA Argumentul lipsește,
pentru fiecare secțiune de intrare orfană. O secție orfană este una nu
menționat în mod special într-un script de linker. Puteți utiliza această opțiune
de mai multe ori pe linia de comandă; Împiedică îmbinarea normală
de secțiuni de intrare cu același nume, suprascriind secțiunea de ieșire
sarcini într-un script linker.
-v
--versiune
-V Afișați numărul versiunii pentru ld. -V opțiunea listează și
emulații acceptate.
-x
--aruncă-toate
Ștergeți toate simbolurile locale.
-X
--aruncă-localnici
Ștergeți toate simbolurile locale temporare. (Aceste simboluri încep cu
prefixe de etichetă locale specifice sistemului, de obicei .L pentru sistemele ELF
or 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. Acest
opțiunea poate fi dată de orice număr de ori. Pe multe sisteme este
este necesar să se adauge o liniuță de subliniere.
Această opțiune este utilă atunci când aveți un simbol nedefinit în dvs
link, dar nu știu de unde vine referința.
-Y cale
Adăuga cale la calea implicită de căutare a bibliotecii. Această opțiune există
pentru compatibilitatea Solaris.
-z cuvinte cheie
Cuvintele cheie recunoscute sunt:
Combreloc.
Combină mai multe secțiuni de reloc și le sortează pentru a deveni dinamice
este posibilă stocarea în cache a căutării simbolurilor.
def
Nu permite simboluri nedefinite în fișierele obiect. Simboluri nedefinite
în bibliotecile partajate 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 disponibile simbolurile definite de acest obiect partajat
pentru rezoluția simbolurilor bibliotecilor î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 lui în timpul de execuție să se facă
apar înainte de inițializarea în timp de execuție a oricăror alte obiecte
introduse în proces în același timp. În mod similar, cel
Finalizarea runtime a obiectului va avea loc după runtime
finalizarea oricăror alte obiecte.
interpune
Marchează obiectul pe care tabelul său de simboluri îl interpune înaintea tuturor
simboluri, ci executabilul principal.
leneș
Când generați o bibliotecă executabilă sau partajată, marcați-o la
spuneți linkerului dinamic să amâne rezoluția apelurilor de funcție
punctul în care funcția este numită (legare leneșă), mai degrabă
decât în timpul încărcării. Legarea leneșă este implicită.
loadfltr
Marchează obiectul la care filtrele sale vor fi procesate imediat
timpul de rulare.
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
variabile definite în bibliotecile partajate. Poate duce la dinamică
relocari de text.
nodefaultlib
Marchează obiectul care caută dependențe ale acestuia
obiectul va ignora orice cale de căutare implicită î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ă.
a) Sport and Nutrition Awareness Day in Manasia Around XNUMX people from the rural commune Manasia have participated in a sports and healthy nutrition oriented activity in one of the community’s sports ready yards. This activity was meant to gather, mainly, middle-aged people from a Romanian rural community and teach them about the benefits that sports have on both their mental and physical health and on how sporting activities can be used to bring people from a community closer together. Three trainers were made available for this event, so that the participants would get the best possible experience physically and so that they could have the best access possible to correct information and good sports/nutrition practices. b) Sports Awareness Day in Poiana Țapului A group of young participants have taken part in sporting activities meant to teach them about sporting conduct, fairplay, and safe physical activities. The day culminated with a football match.
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 la
spuneți linkerului dinamic să rezolve toate simbolurile când programul
este pornită sau când biblioteca partajată este legată de utilizare
dlopen, în loc să amâne rezoluția apelurilor de funcție 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 zero va suprascrie orice dimensiune implicită diferită de zero
Crearea segmentului „PT_GNU_STACK”.
bndplt
Generați întotdeauna prefixul BND în intrările PLT. Sprijinit pentru
Linux/x86_64.
noextern-protected-date
Nu tratați simbolul de date protejate ca fiind extern atunci când construiți
bibliotecă comună. Această opțiune înlocuiește implicit backend-ul de linker.
Poate fi folosit pentru a rezolva mutările incorecte împotriva
simboluri de date protejate generate de compilator. Actualizări pe
simbolurile de date protejate de către alt modul nu sunt vizibile pentru
bibliotecă partajată rezultată. 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 la transformarea indirectă
apel la o funcție definită local, foo, prin slotul său GOT.
call-nop=prefix-adr generează „0x67 call 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". Sprijinit 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ă. Pot fi fie
nume de fișiere explicite sau -l opțiuni.
Arhivele specificate sunt căutate în mod repetat până când nu există noi
sunt create referințe nedefinite. În mod normal, o arhivă este căutată
o singură dată în ordinea în care este specificat pe linia de comandă.
Dacă 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
linia de comandă, linkerul nu ar putea rezolva asta
referinţă. Prin gruparea arhivelor, toate vor fi 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ță. Este cel mai bine
să-l folosească numai atunci 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. Presupunerea este că utilizatorul știe ce sunt
face și dorește în mod deliberat să facă legătura în aceste fișiere de intrare necunoscute.
Acesta a fost comportamentul implicit al linkerului, înainte de lansarea 2.14.
Comportamentul implicit de la versiunea 2.14 în continuare este respingerea acestora
fișiere de intrare și așadar --accept-unknown-input-arch opțiunea a fost
adăugat pentru a restabili 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 pe linia de comandă după --după cum este necesar opțiune.
În mod normal, linkerul va adăuga o etichetă DT_NEEDED pentru fiecare dinamică
bibliotecă menționată pe linia de comandă, indiferent dacă
biblioteca este de fapt necesară sau nu. --după cum este necesar provoacă un DT_NEEDED
eticheta să fie emisă numai pentru o bibliotecă care at acea punct in il legătură
satisface o referință de simbol neslabă nedefinită dintr-un obișnuit
fișier obiect sau, dacă biblioteca nu este găsită în listele DT_NEEDED
a altor biblioteci necesare, o referință de simbol non-slab nedefinit
dintr-o altă bibliotecă dinamică necesară. Fișiere obiect sau biblioteci
care apare pe linia de comandă după biblioteca în cauză nu
influențează 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 cu
numele lor la --după cum este necesar și --nu-așa cum este necesar Opțiuni. ei
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
platforme pentru care sunt acceptate biblioteci partajate. Această opțiune este
în mod normal, implicit pe astfel de platforme. Diferitele variante ale
această opțiune este pentru compatibilitate cu diverse sisteme. Poți
utilizați această opțiune de mai multe ori pe linia de comandă: afectează
bibliotecă în căutarea -l opțiunile care îl urmează.
-Bgrup
Setați indicatorul „DF_1_GROUP” în intrarea „DT_FLAGS_1” din dinamică
secțiune. Acest lucru face ca linkerul de rulare să gestioneze căutările în acest lucru
obiectul și dependențele acestuia să fie efectuate numai în interiorul grupului.
--unresolved-symbols=raportează-toate este subînțeles. Această opțiune este numai
semnificativ pe platformele ELF care acceptă biblioteci partajate.
-Bstatic
-dn
-non_shared
-static
Nu conectați cu bibliotecile partajate. Acest lucru are sens numai pe
platforme pentru care sunt acceptate biblioteci partajate. Diferitul
variantele acestei opțiuni sunt pentru compatibilitate cu diverse sisteme.
Puteți utiliza această opțiune de mai multe ori pe linia de comandă: it
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. Făcând acest lucru înseamnă că o bibliotecă partajată este
fiind create dar că toate referințele externe ale bibliotecii
trebuie rezolvată prin extragerea de intrări din bibliotecile statice.
-Bsimbolic
Când creați o bibliotecă partajată, legați referințele la simboluri globale
la definiția din biblioteca partajată, dacă există. În mod normal, asta
este posibil pentru un program legat de o bibliotecă partajată la
suprascrie definiția din biblioteca partajată. Această opțiune poate
fi folosit și cu --export-dinamic opțiunea, la crearea unui
executabil independent de poziție, pentru a lega referințe la global
simboluri la definiția din executabil. Această opțiune este
semnificativ doar pe platformele ELF care acceptă biblioteci partajate și
executabile independente de poziție.
-Funcții-simbolice
Când creați o bibliotecă partajată, legați referințele la funcția globală
simboluri la definiția din biblioteca partajată, dacă există. Acest
opțiunea poate fi folosită și cu --export-dinamic opțiune, când
crearea unui executabil independent de poziție, pentru a lega referințe
simboluri de funcție globale la definiția din executabil.
Această opțiune are sens numai pe platformele ELF care acceptă
biblioteci partajate și executabile independente de poziție.
--dynamic-list=fișier-listă-dinamică
Specificați numele unui fișier de listă dinamică pentru linker. Aceasta este
folosit de obicei atunci când se creează biblioteci partajate pentru a specifica o listă de
simboluri globale ale căror referințe nu ar trebui să fie legate de
definiție în biblioteca partajată sau crearea dinamică
executabile legate pentru a specifica o listă de simboluri care ar trebui să fie
adăugat la tabelul de simboluri din executabil. Această opțiune este numai
semnificativ pe platformele ELF care acceptă biblioteci partajate.
Formatul listei dinamice este același cu nodul versiunii
fără domeniu și nume de nod. 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 tipul de rulare C++
Identificare.
--verifica-secţiuni
--fără-verifică-secțiuni
Întreabă linkerul nu pentru a verifica adresele de secțiuni după ce au fost
atribuite pentru a vedea dacă există suprapuneri. În mod normal, linkerul
va efectua această verificare și, dacă găsește suprapuneri, o va face
produce mesaje de eroare adecvate. Linkerul știe despre și
face rezerve pentru secțiunile suprapuse. Implicit
comportamentul poate fi restabilit utilizând comutatorul din linia de comandă
--verifica-secţiuni. Suprapunerea secțiunilor nu este de obicei verificată
link-uri relocabile. Puteți forța verificarea în acest caz utilizând
il --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
de etichete DT_NEEDED în interiorul Bibliotecile dinamice ELF menționate pe
Linie de comanda. În mod normal, linkerul nu va adăuga o etichetă DT_NEEDED la
binar de ieșire pentru fiecare bibliotecă menționată într-o etichetă DT_NEEDED într-un
bibliotecă dinamică de intrare. Cu --copy-dt-needed-enters specificat la
linia de comandă, cu toate acestea, orice biblioteci dinamice care o urmează
au adăugat intrările lor DT_NEEDED. Comportamentul implicit poate fi
restaurat cu --no-copy-dt-needed-enters.
Această opțiune are, de asemenea, un efect asupra rezoluției simbolurilor în
biblioteci dinamice. Cu --copy-dt-needed-enters biblioteci dinamice
menționate pe linia de comandă vor fi căutate recursiv,
urmând etichetele lor DT_NEEDED către alte biblioteci, pentru a
rezolvați simbolurile cerute de binarul de ieșire. Cu implicit
stabilind însă căutarea bibliotecilor dinamice care îl urmează
se va opri cu biblioteca dinamică în sine. Nu există linkuri DT_NEEDED
fi parcurs pentru a rezolva simboluri.
--cref
Produceți un tabel de referințe încrucișate. Dacă un fișier de hartă linker este în curs
generat, tabelul de referințe încrucișate este tipărit în fișierul hartă.
În caz contrar, este tipărit pe ieșirea standard.
Formatul tabelului este intenționat simplu, astfel încât să fie
procesat cu ușurință de un script dacă este necesar. Simbolurile sunt imprimate
afară, sortate după nume. Pentru fiecare simbol, este o listă de nume de fișiere
dat. Dacă simbolul este definit, primul fișier listat este
locația definiției. Dacă simbolul este definit ca un comun
valoare, apoi orice fișiere în care se întâmplă acest lucru apar în continuare. În sfârșit orice
sunt listate fișierele care fac referire la simbol.
--no-define-common
Această opțiune inhibă atribuirea adreselor simbolurilor comune.
Comanda de script „INHIBIT_COMMON_ALLOCATION” are același efect.
--no-define-common opțiunea permite decuplarea deciziei de a
atribuiți adrese simbolurilor comune din alegerea ieșirii
tip fișier; în caz contrar, un tip de ieșire neRelocabil forțează alocarea
adrese la simboluri comune. Folosind --no-define-common permite
Simboluri comune care sunt referite dintr-o bibliotecă partajată să fie
adrese atribuite numai în programul principal. Acest lucru elimină
spațiu duplicat neutilizat în biblioteca partajată și, de asemenea, împiedică orice
posibilă confuzie cu privire la rezolvarea la duplicatul greșit atunci când există
sunt multe module dinamice cu căi de căutare specializate pentru runtime
rezoluția simbolului.
--defsym=simbol=expresie
Creați un simbol global în fișierul de ieșire, care conține absolutul
adresa data de expresie. Puteți utiliza această opțiune de câte ori
după cum este necesar pentru a defini mai multe simboluri în linia de comandă. A
forma 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 hexazecimal
constante sau simboluri. Dacă aveți nevoie de expresii mai elaborate,
luați în considerare utilizarea limbajului de comandă pentru linker dintr-un script. Notă:
nu ar trebui să existe spațiu alb între simbol, semnul egal
("="), și expresie.
- Language [=.stil]
--nu-demangle
Aceste opțiuni controlează dacă să dezmeglem numele simbolurilor din eroare
mesaje și alte rezultate. Când linkerului i se spune să demangleze, acesta
încearcă să prezinte numele simbolurilor într-un mod lizibil: dezlipește
litere de subliniere de început dacă sunt utilizate de formatul de fișier obiect și
convertește numele simbolurilor alterate C++ în nume care pot fi citite de utilizator.
Diferiți compilatori au stiluri diferite de manipulare. Opționalul
Argumentul stilului de demangling poate fi folosit pentru a alege un potrivit
stil de demangling pentru compilator. Linker-ul va demangle prin
implicit, cu excepția cazului în care variabila de mediu COLLECT_NO_DEMANGLE este setat.
Aceste opțiuni pot fi folosite pentru a înlocui valoarea implicită.
-Ifişier
--dynamic-linker=fişier
Setați numele linkerului dinamic. Acest lucru are sens doar atunci când
generând executabile ELF legate dinamic. Dinamica implicită
linkerul este în mod normal corect; nu folosi asta decât dacă știi ce ești
fac.
--no-dynamic-linker
Când produceți un fișier executabil, omiteți cererea pentru o dinamică
linker pentru a fi utilizat în timpul încărcării. Acest lucru are sens doar pentru ELF
executabile care conțin relocari dinamice și, de obicei, necesită
codul punctului de intrare care este capabil să proceseze aceste relocari.
--avertismente-fatale
--fără-avertismente-fatale
Tratați toate avertismentele ca erori. Comportamentul implicit poate fi
restaurat 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 un
Sufixul „.exe” sau „.dll”, această opțiune forțează linkerul să copieze fișierul
fișier de ieșire la unul cu același nume cu un sufix „.exe”. Acest
opțiunea 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 un
imagine, cu excepția cazului în care 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 nu acceptă această opțiune. Comportamentul implicit
(de a nu efectua această colectare a gunoiului) poate fi restaurat de
precizând --fără-gc-secțiuni pe linia de comandă. Rețineți că gunoiul
colecția 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 utilizate prin examinare
simboluri și relocari. Secțiunea care conține simbolul de intrare
și toate secțiunile care conțin simboluri nedefinite pe linia de comandă
vor fi păstrate, la fel ca și secțiunile care conțin simboluri la care face referire
obiecte dinamice. Rețineți că atunci când construiți biblioteci partajate,
linkerul trebuie să presupună că orice simbol vizibil este referit. O singura data
acest set inițial de secțiuni a fost determinat, linkerul
marchează recursiv ca fiind folosită orice secțiune la care face referire
relocari. Vedea --intrare și --nedefinit.
Această opțiune poate fi setată atunci când se realizează o legătură parțială (activată cu
opțiune -r). În acest caz rădăcina simbolurilor păstrate trebuie să fie
specificat în mod explicit fie prin an --intrare or --nedefinit opțiune 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ă este gunoi
colectarea a fost activată prin intermediul --gc-secţiuni) opțiune. The
comportament implicit (de a nu lista secțiunile care sunt eliminate)
poate fi restaurat prin specificarea --no-print-gc-sections la comanda
linia.
--print-output-format
Tipăriți numele formatului de ieșire implicit (poate influențat de
alte opțiuni de linie de comandă). Acesta este șirul care ar apărea
într-o comandă de script de linker „OUTPUT_FORMAT”.
--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
aveți o vedere rapidă a cantității de memorie liberă. Formatul
ieșirea are un titlu și o linie per regiune. Este atât uman
lizibil și ușor analizabil de instrumente. Iată un exemplu de un
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 rezultatul standard
și ieșire.
--ţintă-ajutor
Tipăriți un rezumat al tuturor opțiunilor specifice țintei din standard
ieșire și ieșire.
-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 peste utilizarea memoriei prin memorarea în cache a
tabele de simboluri ale fișierelor de intrare din memorie. Această opțiune spune ld la
în schimb, optimizați pentru utilizarea memoriei, recitind tabelele cu simboluri
după cum este necesar. 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 partajare non-simbolică
bibliotecă. Schimbarea --[no-]allow-shlib-undefined controlează
comportament pentru raportarea referințelor nerezolvate găsite în shared
bibliotecile fiind conectate în.
--permite-definiții-multiple
-z muldefs
În mod normal, atunci când un simbol este definit de mai multe ori, linkerul o va face
raportați o eroare fatală. Aceste opțiuni permit definiții multiple și
se va folosi prima definiţie.
- shlib-nedefinit
--no-allow-shlib-undefined
Permite sau interzice simboluri nedefinite în bibliotecile partajate. Acest
comutatorul este similar cu --nu-nedefinit cu excepția faptului că determină
comportament atunci când simbolurile nedefinite sunt mai degrabă într-o bibliotecă partajată
decât un fișier obiect obișnuit. Nu afectează cât de nedefinit
simbolurile din fișierele obiect obișnuite sunt gestionate.
Comportamentul implicit este de a raporta erori pentru orice simboluri nedefinite
referit în bibliotecile partajate dacă linker-ul este obișnuit
creați un executabil, dar pentru a le permite dacă linkerul este utilizat
pentru a crea o bibliotecă partajată.
Motivele pentru a permite referințe de simbol nedefinite în comun
bibliotecile specificate la momentul linkului sunt următoarele:
· O bibliotecă partajată specificată la momentul conexiunii poate să nu fie aceeași cu
cel care este disponibil la momentul încărcării, deci simbolul ar putea
de fapt, poate fi rezolvată în timpul încărcării.
· Există unele sisteme de operare, de exemplu BeOS și HPPA, unde
simbolurile nedefinite din bibliotecile partajate sunt normale.
Nucleul BeOS, de exemplu, corectează bibliotecile partajate la încărcare
timp pentru a selecta funcția cea mai potrivită pentru
arhitectura actuala. Acesta este folosit, de exemplu, pentru
selectați dinamic o funcție memset adecvată.
--no-undefined-version
În mod normal, atunci când un simbol are o versiune nedefinită, linkerul o va face
ignora. Această opțiune nu permite simbolurile cu versiunea nedefinită și
o eroare fatală va fi emisă în schimb.
--default-symver.
Creați și utilizați o versiune implicită a simbolului (numele) pentru
simboluri exportate neversionate.
--default-imported-symver
Creați și utilizați o versiune implicită a simbolului (numele) pentru
simboluri importate neversionate.
--nu-avertizam-nepotrivire
În mod normal ld va da o eroare dacă încercați să conectați intrarea
fișiere care nu se potrivesc din anumite motive, poate pentru că acestea
au fost compilate pentru diferite procesoare sau pentru diferite
endiannesses. Această opțiune spune ld că ar trebui să permită în tăcere
astfel de posibile erori. Această opțiune trebuie utilizată numai cu grijă,
în cazurile în care aţi întreprins vreo acţiune specială care să asigure că
erorile de linker sunt nepotrivite.
--no-warn-search-nepotrivire
În mod normal ld va da un avertisment dacă găsește o bibliotecă incompatibilă
în timpul unei căutări în bibliotecă. Această opțiune reduce la tăcere avertismentul.
--no-toată-arhivă
Opriți efectul --toată-arhiva opțiune pentru ulterior
arhivează fișiere.
--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ă acesta
întâlnește erori în timpul procesului de conectare; iese fara sa scrie
un fișier de ieșire atunci când emite orice eroare.
-nostdlib
Căutați numai directoarele bibliotecii specificate explicit în comandă
linia. Directoarele de bibliotecă specificate în scripturile de linker (inclusiv
scripturile de linker specificate pe linia de comandă) sunt ignorate.
--oformat=format de iesire
ld poate fi configurat pentru a suporta mai mult de un fel de fișier obiect.
Dacă dvs. ld este configurat astfel, puteți utiliza --oformat opțiune
pentru a specifica formatul binar pentru fișierul obiect de ieșire. Chiar și când
ld este configurat pentru a suporta formate de obiecte alternative, tu nu
de obicei trebuie să specificați acest lucru, ca 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 un șir de text, numele unui anumit format
susținut de bibliotecile BFD. (Puteți lista binarul disponibil
formate cu objdump -i.) Comanda de script „OUTPUT_FORMAT” poate
specificați și formatul de ieșire, dar această opțiune îl înlocuiește.
-plăcintă
--pic-executable
Creați un executabil independent de poziție. Acesta este doar momentan
suportat pe platformele ELF. executabilele independente de poziție sunt
similar bibliotecilor partajate prin faptul că sunt relocate de către
linker dinamic la adresa virtuală pe care sistemul de operare o alege pentru ei
(care poate varia între invocări). Ca normal din punct de vedere dinamic
executabilele legate pot fi executate și simbolurile definite în
executabilul nu poate fi suprascris de bibliotecile 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 numai
sprijinit pe câteva ţinte.
Pe unele platforme --Relaxați-vă opțiunea realizează obiectiv specific,
optimizări globale care devin posibile atunci când linker-ul se rezolvă
adresarea în program, cum ar fi moduri relaxante de adrese,
sintetizând instrucțiuni noi, selectând versiunea mai scurtă a curentului
instrucțiuni și combinarea valorilor constante.
Pe unele platforme, aceste optimizări globale pot face timp de legătură
depanarea simbolică a executabilului rezultat imposibilă. Aceasta este
cunoscut a fi cazul familiei Matsushita MN10200 și MN10300
de procesoare.
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 simbolurile enumerate în dosar nume de fișier, aruncând toate
alții. nume de fișier este pur și simplu un fișier plat, cu un nume de simbol per
linia. Această opțiune este utilă în special în medii (cum ar fi
VxWorks) unde se acumulează un mare tabel global de simboluri
treptat, pentru a conserva memoria de rulare.
- free-simboluri-fișier face nu eliminați simbolurile nedefinite sau
simboluri necesare pentru relocari.
Puteți doar să specificați - free-simboluri-fișier o dată în comandă
linia. 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 executabil ELF cu obiecte partajate. Toate -rpath
argumentele sunt concatenate și transmise linker-ului de rulare, care
le folosește pentru a localiza obiecte partajate în timpul execuției. The -rpath opțiune
este folosit și la localizarea obiectelor partajate care sunt necesare pentru
obiecte partajate incluse în mod explicit în link; vezi descrierea
a -rpath-link opțiune. Dacă -rpath nu este folosit la conectarea unui
ELF executabil, conținutul variabilei de mediu
„LD_RUN_PATH” va fi folosit dacă este definit.
-rpath opțiunea poate fi utilizată și pe SunOS. În mod implicit, pe SunOS,
linkerul va forma 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 este utilizată opțiunea, timpul de rulare
calea de căutare 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 nume de director, mai degrabă decât de un nume de fișier, este
tratată ca fiind -rpath opțiune.
-rpath-link=dir
Când utilizați ELF sau SunOS, o bibliotecă partajată poate necesita alta.
Acest lucru se întâmplă atunci când un link „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-
link partajat, nerelocabil, va încerca automat să localizeze
biblioteca partajată necesară și includeți-o în link, dacă este
neincluse î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 secvență de nume de director fie prin
specificarea unei liste de nume separate prin două puncte sau prin apariție
de mai multe ori.
Această opțiune trebuie utilizată cu precauție, deoarece suprascrie căutarea
cale care poate fi compilată greu într-o bibliotecă partajată. În
într-un astfel de caz este posibil să se folosească neintenționat un diferit
cale de căutare decât ar face linkerul de rulare.
Linker-ul folosește următoarele căi de căutare pentru a localiza necesarul
biblioteci partajate:
1. Orice directoare specificate de -rpath-link opțiuni.
2. Orice directoare specificate de -rpath Opțiuni. Diferența
între -rpath și -rpath-link este că directoarele specificate de
-rpath opțiunile sunt incluse în executabil și utilizate la
runtime, în timp ce -rpath-link opțiunea este eficientă numai la
timpul legaturii. In cautarea -rpath in acest fel este doar sustinuta de
linkere native și linkere încrucișate care au fost configurate
cu --cu-syroot opțiune.
3. Pe un sistem ELF, pentru linkerii nativi, dacă -rpath și
-rpath-link opțiunile nu au fost folosite, căutați conținutul
variabila de mediu „LD_RUN_PATH”.
4. Pe SunOS, dacă -rpath opțiunea nu a fost folosită, căutați oricare
directoarele specificate folosind -L opțiuni.
5. Pentru un linker nativ, căutați conținutul mediului
variabila „LD_LIBRARY_PATH”.
6. Pentru un linker ELF nativ, directoarele din „DT_RUNPATH” sau
„DT_RPATH” dintr-o bibliotecă partajată sunt căutate pentru partajate
bibliotecile necesare acestuia. Intrările „DT_RPATH” sunt ignorate dacă
Intrările „DT_RUNPATH” există.
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 directoarelor găsite în acesta
fișier.
Dacă biblioteca partajată necesară nu este găsită, linkerul va emite
un avertisment și continuați cu linkul.
-impartit
-Bshareable
Creați o bibliotecă partajată. Acest lucru este în prezent acceptat numai pe ELF,
Platformele XCOFF și SunOS. Pe SunOS, linkerul va fi automat
creați o bibliotecă partajată dacă -e opțiunea nu este folosită ș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 în
ordine crescătoare sau descrescătoare când le plasează în
secțiunile de ieșire corespunzătoare. Alinierea simbolurilor luate în considerare sunt
șaisprezece octeți sau mai mare, opt octeți, patru octeți, doi octeți și unu-
octet. Acest lucru este pentru a preveni golurile dintre simboluri din cauza alinierii
constrângeri. Dacă nu este specificată o ordine de sortare, atunci descrescătoare
ordinea este asumată.
--sort-section=nume
Această opțiune va aplica „SORT_BY_NAME” tuturor secțiunilor cu metacaractere
modele din scriptul linker.
--sort-section=aliniere
Această opțiune va aplica „SORT_BY_ALIGNMENT” tuturor secțiunilor cu caractere joker
modele din scriptul 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 nu
o singură secțiune de ieșire din fișier conține mai mult de conta
relocari. Acest lucru este util atunci când se generează fișiere uriașe relocabile
pentru descărcare în anumite nuclee în timp real cu obiectul COFF
tipul fisierului; deoarece COFF nu poate reprezenta mai mult de 65535
relocari intr-o singura sectie. Rețineți că acest lucru nu va funcționa
cu formate de fișier obiect care nu acceptă 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 sectiune de iesire va contine atat 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 timpul de execuție și utilizarea memoriei.
--sysroot=director
Utilizare director ca locația sysroot-ului, suprascriind
implicit-time de configurare. Această opțiune este acceptată numai de linkerii
care au fost configurate folosind --cu-syroot.
--format-tradițional
Pentru unele ținte, rezultatul de ld este diferită în anumite privințe de
ieșirea unui linker existent. Această comutare solicită ld să utilizeze
în schimb formatul tradițional.
De exemplu, pe SunOS, ld combină intrările duplicate în simbol
masă cu șiruri. Acest lucru poate reduce dimensiunea unui fișier de ieșire cu full
depanarea informațiilor cu peste 30 la sută. Din păcate, SunOS
Programul „dbx” nu poate citi programul rezultat („gdb” are nr
necaz). The --format-tradițional comutatorul spune ld a nu combina
intrări duplicat.
--section-start=nume secțiune=org
Găsiți o secțiune în fișierul de ieșire la adresa absolută dată
by org. Puteți utiliza această opțiune de câte ori este necesar
localizați mai multe secțiuni în linia de comandă. org trebuie să fie un singur
număr întreg hexazecimal; pentru compatibilitate cu alte linkuri, puteți
omite conducerea 0x asociate de obicei cu valori hexazecimale.
Notă: nu ar trebui 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
primul octet al segmentului de text.
-Trodata-segment=org
Când se creează un executabil ELF sau un obiect partajat pentru o țintă unde
datele numai în citire se află în propriul segment separat de
text executabil, va seta adresa primului octet al
segment de date numai pentru citire.
-Tldata-segment=org
Când creați un executabil ELF sau un obiect partajat pentru mediul x86-64
model de memorie, va seta adresa primului octet al
segment de date.
--unresolved-simbols=metodă
Determinați cum să gestionați simbolurile nerezolvate. Sunt 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 partajate
biblioteci, dar ignorați-le dacă provin de la obiect obișnuit
fișiere.
ignore-in-shared-libs
Raportați simbolurile nerezolvate care provin din fișiere obiect obișnuite,
dar ignoră-le dacă provin din biblioteci partajate. Acesta poate
fi util la crearea unui binar dinamic ș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, de asemenea
controlat de --[no-]allow-shlib-undefined opțiune.
În mod normal, linkerul va genera un mesaj de eroare pentru fiecare
simbol nerezolvat raportat dar opțiunea --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 linkerului
sprijinit. Afișează fișierele de intrare care pot și nu pot fi deschise.
Afișați scriptul de linker utilizat de linker. Dacă opțional
NUMĂR argument > 1, va fi afișată și starea simbolului pluginului.
--Version-script =versiune-scriptfile
Specificați numele unui script de versiune pentru linker. Aceasta este
folosit de obicei atunci când se creează biblioteci partajate pentru a specifica suplimentar
informații despre ierarhia versiunilor pentru bibliotecă fiind
creată. Această opțiune este pe deplin acceptată numai pe platformele ELF
care suportă biblioteci partajate; vedea VERSIUNE. Este parțial
acceptat pe platformele PE, care pot folosi scripturi de versiune pentru a filtra
vizibilitatea simbolului în modul de export automat: orice simbol marcat local in
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 o definiție de simbol. Linkerii Unix permit acest lucru oarecum neglijent
practică, dar linkerii de pe alte sisteme de operare nu o fac. Acest
opțiunea vă permite să găsiți potențiale probleme de la combinarea globală
simboluri. Din păcate, unele biblioteci C folosesc această practică, deci tu
poate primi unele avertismente despre simboluri în biblioteci, precum și în
programele dvs.
Există trei tipuri de simboluri globale, ilustrate aici de C
exemple:
int i = 1;
O definiție, care merge în secțiunea de date inițializate a
fisier de iesire.
extern int i;
O referință nedefinită, care nu alocă spațiu. Acolo
trebuie să fie fie o definiție, fie un simbol comun pentru variabilă
undeva.
int i;
Un simbol comun. Dacă există doar (una sau mai multe) comune
simboluri pentru o variabilă, aceasta merge în zona de date neinițializată
a fișierului de ieșire. Linker-ul îmbină mai multe simboluri comune
pentru aceeași variabilă într-un singur simbol. Dacă sunt de
diferite dimensiuni, alege cea mai mare dimensiune. Linkerul se transformă în a
simbol comun într-o declarație, dacă există o definiție a
aceeași variabilă.
--avertizează-obișnuit opțiunea poate produce cinci tipuri de avertismente. Fiecare
avertismentul este format dintr-o pereche de linii: prima descrie simbolul
tocmai întâlnit, iar al doilea descrie simbolul anterior
întâlnit cu același nume. Unul sau ambele dintre cele două simboluri
va 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 un ulterior
este întâlnită definiția simbolului. Aceasta este la fel ca
cazul precedent, cu excepția faptului că simbolurile sunt întâlnite în a
ordine diferită.
( ): avertisment: definiția lui ` '
comun superior
( ): avertisment: comun este aici
3. Îmbinarea unui simbol comun cu un comun anterior de aceeași dimensiune
simbol.
( ): 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.
Acesta este același cu cazul precedent, cu excepția faptului că simbolurile
sunt întâlnite într-o ordine diferită.
( ): 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 formate de fișiere obiect. Pentru formate precum COFF sau ELF,
linkerul nu poate detecta utilizarea constructorilor globali.
--warn-multiple-gp
Avertizați dacă sunt necesare mai multe valori globale de indicator în ieșire
fişier. Acest lucru este semnificativ doar pentru anumite procesoare, cum ar fi
Alfa. Mai exact, unele procesoare introduc constante cu valori mari
o sectiune speciala. Un registru special (indicatorul global) puncte
î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ă. De cand
decalajul în modul relativ de bază-registru este fix și relativ
mic (de exemplu, 16 biți), aceasta limitează dimensiunea maximă a constantei
bazin. Astfel, în programele mari, este adesea necesară utilizarea
mai multe valori globale de indicator pentru a le putea adresa pe toate
constante posibile. Această opțiune determină emiterea unui avertisment
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ă pe fiecare
modul care se referă la acesta.
--warn-section-align
Avertizați dacă adresa unei secțiuni de ieșire este schimbată din cauza
aliniere. De obicei, alinierea va fi stabilită de o intrare
secțiune. Adresa va fi schimbată numai dacă nu este în mod explicit
specificat; adică dacă comanda „SECȚII” nu specifică a
adresa de început pentru secțiune.
--warn-shared-textrel
Avertizați dacă linkerul adaugă un DT_TEXTREL la un obiect partajat.
--avertizează-altern-em
Avertizați dacă un obiect are un cod de mașină ELF alternativ.
--warn-unresolved-simbols
Dacă linkerul va raporta un simbol nerezolvat (vezi
opțiune --simboluri-nerezolvate) va genera în mod normal o eroare.
Această opțiune îl face să genereze un avertisment.
--error-unresolved-simbols
Aceasta restabilește comportamentul implicit al linkerului de a genera erori
când raportează simboluri nerezolvate.
--toată-arhiva
Pentru fiecare arhivă menționată pe linia de comandă după
--toată-arhiva opțiunea, includeți fiecare fișier obiect din arhivă în
link-ul, mai degrabă decât să căutați în arhivă obiectul necesar
fișiere. Acesta este de obicei folosit pentru a transforma un fișier arhivă într-un fișier partajat
bibliotecă, forțând fiecare obiect să fie inclus în rezultatul
bibliotecă comună. 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, așa că trebuie să utilizați -Wl,-toată-arhiva. Al doilea,
nu uitați să utilizați -Wl,-nu-toată-arhivă după lista ta de
arhive, deoarece gcc va adăuga propria listă de arhive la dvs
link și este posibil să nu doriți ca acest steag să îi afecteze și pe aceștia.
--wrap=simbol
Utilizați o funcție de ambalare pentru simbol. Orice referire nedefinită la
simbol va fi rezolvat în „__wrap_simbol". Orice nedefinit
referință la „__real_simbol" se va rezolva simbol.
Acesta poate fi folosit pentru a oferi un înveliș pentru o funcție de sistem. The
funcția wrapper ar trebui să fie numită „__wrap_simbol". Dacă dorește
apelați funcția de sistem, ar trebui să sune „__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” vor apela în schimb funcția „__wrap_malloc”.
Apelul către „__real_malloc” în „__wrap_malloc” va apela realul
funcția „malloc”.
Poate doriți să furnizați și o funcție „__real_malloc”, astfel încât
link-uri fără --înfășurare opțiunea va reuși. Dacă faci asta, tu
nu ar trebui să pună definiția „__real_malloc” în același fișier
ca „__wrap_malloc”; dacă o faci, asamblatorul poate rezolva 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 ELF
Antetul segmentului „PT_GNU_EH_FRAME”.
--no-ld-generated-unwind-info
Solicitați crearea informațiilor de derulare „.eh_frame” pentru linkerul generat
secțiuni de cod precum PLT. Această opțiune este activată în mod prestabilit dacă este conectat
informațiile generate de relaxare sunt acceptate.
--enable-new-dtags
--disable-new-dtags
Acest linker poate crea noile etichete dinamice în ELF. Dar mai în vârstă
Este posibil ca sistemele ELF să nu le înțeleagă. Daca specificati
--enable-new-dtags, noile etichete dinamice vor fi create după cum este necesar
iar etichetele dinamice mai vechi vor fi omise. Dacă specificați
--disable-new-dtags, nu vor fi create etichete dinamice noi. De
implicit, noile etichete dinamice nu sunt create. Rețineți că acelea
opțiunile sunt disponibile numai pentru sistemele ELF.
--hash-size=număr
Setați dimensiunea implicită a tabelelor hash ale linkerului la un număr prim
aproape de număr. Mărirea acestei valori poate reduce lungimea
timpul necesar linkerului pentru a-și îndeplini sarcinile, în detrimentul
creșterea cerințelor de memorie ale linkerului. La fel de reducere
această valoare poate reduce cerințele de memorie în detrimentul
viteză.
- stilul-stil =stil
Setați tipul tabelelor hash ale linkerului. stil poate fi fie „sysv”
pentru secțiunea clasică ELF „.hash”, „gnu” pentru stilul nou GNU
Secțiunea „.gnu.hash” sau „both” atât pentru clasicul ELF „.hash” cât și
tabelele hash GNU „.gnu.hash” în stil nou. 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 de depanare a secțiunilor DWARF
sunt comprimate folosind zlib. --compress-debug-sections=niciuna nu
comprimați secțiunile de depanare DWARF. --compress-debug-sections=zlib-gnu
comprimă secțiunile de depanare DWARF și redenumește numele secțiunilor de depanare în
începe cu .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 de opțiunile de configurare utilizate
pentru a construi lanțul de instrumente. Valoarea implicită poate fi determinată prin examinare
ieșirea de la linker --Ajutor opțiune.
--reducere-de-memorie-overheads
Această opțiune reduce cerințele de memorie la ld runtime, la
cheltuiala vitezei de conectare. Acesta a fost introdus pentru a selecta vechiul
Algoritmul O(n^2) pentru generarea fișierelor cu hărți de legături, mai degrabă decât noul
Algoritmul O(n) care utilizează aproximativ 40% mai multă memorie pentru stocarea simbolurilor.
Un alt efect al comutatorului este acela de a seta dimensiunea implicită a tabelului hash
la 1021, ceea ce economisește din nou memorie cu prețul prelungirii
timpul de rulare al linkerului. Acest lucru nu se face însă dacă --dimensiunea hash
a fost folosit comutatorul.
--reducere-de-memorie-overheads comutatorul poate fi folosit și pentru activare
alte compromisuri în versiunile viitoare ale linkerului.
--build-id
--build-id=stil
Solicitați crearea unei secțiuni de note ELF „.note.gnu.build-id” sau
o secțiune COFF „.buildid”. Conținutul notei este unic
biți care identifică acest fișier legat. stil poate fi „uuid” pentru a folosi 128
biți aleatori, „sha1” pentru a utiliza un hash SHA160 de 1 de biți pe normativ
părți ale conținutului de ieșire, „md5” pentru a utiliza un hash MD128 de 5 de biți
părțile normative ale conținutului de ieșire sau „0xșnur hexagonal" să utilizeze
un șir de biți ales specificat ca un număr par de hexazecimale
cifrele ("-" și ":" dintre perechile de cifre sunt ignorate).
If stil este omis, se folosește „sha1”.
Stilurile „md5” și „sha1” produc un identificator care este întotdeauna
la fel într-un fișier de ieșire identic, dar va fi unic între toate
fișiere de ieșire neidentice. Nu este destinat să fie comparat ca a
sumă de control pentru conținutul fișierului. Un fișier legat poate fi modificat
mai târziu de către alte instrumente, dar șirul de biți al ID-ului de construcție care identifică
fișierul original legat nu se modifică.
Trecând „niciunul” pentru stil dezactivează setarea de la orice „--build-id”
opțiunile de mai devreme pe linia de comandă.
Linker-ul i386 PE acceptă -impartit opțiunea, care provoacă ieșirea
să fie o bibliotecă legată dinamic (DLL) în loc de o bibliotecă normală
executabil. Ar trebui să numiți rezultatul „*.dll” atunci când utilizați acest lucru
opțiune. În plus, linkerul acceptă pe deplin standardul „*.def”
fișiere, 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, către
asigurați-vă că sunt conectate, la fel ca un fișier obiect normal).
Pe lângă opțiunile comune tuturor țintelor, linkerul i386 PE
acceptă opțiuni suplimentare de linie de comandă care sunt specifice i386
țintă PE. Opțiunile 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-
este și, de asemenea, cu sufixul dezlipit. [Această opțiune este specifică
portul vizat i386 PE al linkerului]
--base-file fişier
Utilizare fişier ca numele unui fișier în care să salveze adresele de bază
a tuturor relocarilor necesare pentru generarea DLL-urilor cu dlltool.
[Aceasta este o opțiune specifică i386 PE]
--dll
Creați un DLL în loc de un executabil obișnuit. De asemenea, puteți utiliza
-impartit sau specificați o „BIBLIOTECĂ” într-un fișier „.def” dat. [Acest
opțiunea este specifică portului vizat i386 PE al linkerului]
--enable-long-section-names
--disable-long-section-names
Variantele PE ale formatului obiect COFF adaugă o extensie care
permite utilizarea numelor de secțiuni mai lungi de opt caractere, the
limita normală pentru COFF. În mod implicit, aceste nume sunt permise numai în
fișiere obiect, deoarece imaginile executabile complet legate nu poartă fișierul
Tabelul de șiruri COFF este necesar pentru a accepta numele mai lungi. Ca GNU
extensie, este posibil să se permită utilizarea lor în imagini executabile
de asemenea, sau (probabil fără rost!) să-l interzice în obiect
fișiere, utilizând aceste două opțiuni. Imagini executabile generate
cu aceste nume de secțiuni lungi sunt ușor non-standard, purtătoare
așa cum fac un tabel cu șiruri și pot genera rezultate confuze când
examinate cu instrumente non-GNU PE, cum ar fi vizualizatoare de fișiere și
basculante. Cu toate acestea, GDB se bazează pe utilizarea numelor de secțiuni lungi PE
pentru a găsi secțiuni de informații despre depanare Dwarf-2 într-o imagine executabilă
în timpul execuției, și deci dacă nicio opțiune nu este specificată în comandă-
linia, ld va activa numele de secțiuni lungi, suprascriind implicit și
comportament corect din punct de vedere tehnic, atunci când constată prezența depanării
informații în timp ce conectați o imagine executabilă și nu eliminați
simboluri. [Această opțiune este valabilă pentru toate porturile vizate PE ale
linker]
--enable-stdcall-fixup
--disable-stdcall-fixup
Dacă linkul găsește un simbol pe care nu îl poate rezolva, va încerca
a face „legare neclară” căutând un alt simbol definit care
diferă doar în formatul numelui simbolului (cdecl vs stdcall)
și va rezolva acel simbol prin conectarea la meci. De exemplu,
simbolul nedefinit „_foo” ar putea fi legat de funcție
„_foo@12”, sau simbolul nedefinit „_bar@16” ar putea fi legat de
funcția „_bar”. Când linkerul face acest lucru, tipărește un avertisment,
deoarece în mod normal ar fi trebuit să nu reușească să se conecteze, dar uneori să se importe
bibliotecile generate din dll-uri terțe ar putea avea nevoie de această caracteristică
fi utilizabil. Daca specificati --enable-stdcall-fixup, această caracteristică este
complet activat și avertismentele nu sunt tipărite. Daca specificati
--disable-stdcall-fixup, această caracteristică este dezactivată și altele
nepotrivirile sunt considerate erori. [Această opțiune este specifică
la 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
definite în descrierea țintei. Prin această opțiune este posibil să
dezactivați/activați prefixul-simbol de subliniere implicit.
--export-toate-simbolurile
Dacă sunt date, toate simbolurile globale din obiecte sunt folosite pentru a construi un DLL
va fi exportat de DLL. Rețineți că aceasta este valoarea implicită dacă
altfel nu ar exista simboluri exportate. Când simbolurile sunt
exportat explicit prin fișiere DEF sau exportat implicit prin
atributele funcției, implicit este să nu exportați nimic altceva
cu excepția cazului în care se oferă această opțiune. Rețineți că simbolurile „DllMain@12”,
„DllEntryPoint@0”, „DllMainCRTStartup@12” și „impure_ptr” vor
să nu fie exportate automat. De asemenea, simboluri importate din altele
DLL-urile nu vor fi reexportate, nici simbolurile care specifică DLL-urile
aspect intern, cum ar fi cele care încep cu „_head_” sau 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
începe cu „__rtti_” sau „__builtin_” nu va fi exportat, pentru a ajuta
cu DLL-uri C++. În cele din urmă, există o listă extinsă de cygwin-
simboluri private care nu sunt exportate (evident, acest lucru se aplică pe
când construiți 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 „mediu”. [Această opțiune
este specific portului vizat i386 PE al linkerului]
--exclude-simboluri simbol,simbol, ...
Specifică o listă de simboluri care nu ar trebui să fie automat
exportate. Numele simbolurilor pot fi delimitate prin virgule sau două puncte.
[Această opțiune este specifică portului vizat i386 PE al
linker]
--exclude-toate-simbolurile
Specifică că niciun simbol nu trebuie exportat automat. [Acest
opțiunea este specifică portului vizat i386 PE al linkerului]
--file-alignment
Specificați alinierea fișierului. Secțiunile din fișier vor începe întotdeauna
la decalaje de fișiere care sunt multipli ai acestui număr. Aceasta este implicită
la 512. [Această opțiune este specifică portului vizat i386 PE al
linkerul]
--morman rezervă
--morman rezervă,comite
Specificați numărul de octeți de memorie de rezervat (și opțional
commit) pentru a fi folosit ca heap pentru acest program. Valoarea implicită este de 1 MB
rezervat, 4K angajat. [Această opțiune este specifică i386 PE
portul vizat al linkerului]
--bază-imagine valoare
Utilizare valoare ca adresa de bază a programului sau dll-ului dvs. Acesta este
cea mai mică locație de memorie care va fi folosită atunci când programul sau dll-ul dvs
este încărcat. Pentru a reduce nevoia de relocare și pentru a îmbunătăți performanța
dintre dll-urile dvs., fiecare ar trebui să aibă o adresă de bază unică și nu
suprapune orice alte dll-uri. Valoarea implicită este 0x400000 pentru executabile,
și 0x10000000 pentru dll-uri. [Această opțiune este specifică i386 PE
portul vizat al linkerului]
--ucide-la
Dacă sunt date, sufixele stdcall (@nn) vor fi scoase din simboluri
înainte de a fi exportate. [Această opțiune este specifică i386 PE
portul vizat al linkerului]
--conștient-adresă-mare
Dacă este dat, bitul corespunzător din câmpul „Caracteristici” al fișierului
Antetul COFF este setat pentru a indica faptul că acest executabil acceptă
adrese virtuale mai mari de 2 gigaocteți. Aceasta ar trebui folosită în
împreună cu /3GB sau /USERVA=valoare comuta megabytes în
Secțiunea „[sisteme de operare]” din BOOT.INI. Altfel, acest pic
nu are efect. [Această opțiune este specifică porturilor vizate PE ale
linkerul]
--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 stabilit de către
driver de compilator (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-versiunea valoare
Setează numărul major al „versiunii de imagine”. Implicit la 1.
[Această opțiune este specifică portului vizat i386 PE al
linker]
--major-os-version valoare
Setează numărul major al „versiunii os”. Implicit la 4. [Acest
opțiunea este specifică portului 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
linker]
--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
linker]
--minor-os-version valoare
Setează numărul minor al „versiunii os”. Implicit la 0. [Acest
opțiunea este specifică portului 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
linker]
--ieșire-def fişier
Linkerul va crea fișierul fişier care va conține un fișier DEF
corespunzătoare DLL-ului generat de linker. Acest fișier DEF
(care ar trebui să fie numit „*.def”) poate fi folosit pentru a crea un import
bibliotecă cu „dlltool” sau poate fi folosit ca referință la
simboluri exportate automat sau implicit. [Această opțiune este
specific portului vizat i386 PE al linkerului]
--out-implib fişier
Linkerul va crea fișierul fişier care va conţine un import
lib corespunzătoare DLL-ului generat de linker. Acest import
lib (care ar trebui să fie numit „*.dll.a” sau „*.a” poate fi folosit pentru a lega
clienții împotriva DLL-ului generat; acest comportament face posibil
pentru a sări peste un pas separat de creare a bibliotecii de import „dlltool”. [Acest
opțiunea 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, pornind opțional
cu baza valoare, cu excepția cazului în care se specifică una folosind „--image-base”
argument. Folosind un 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. [Acest
opțiunea este specifică portului vizat i386 PE al linkerului]
--disable-auto-image-base
Nu generați automat o bază de imagini unică. Dacă nu există
baza de imagini specificată de utilizator ("--image-base") apoi utilizați platforma
Mod implicit. [Această opțiune este specifică portului vizat i386 PE al
linkerul]
--dll-search-prefix şir
Când conectați dinamic la un dll fără o bibliotecă de import, căutați
pentru " .dll" în detrimentul "lib .dll".
Acest comportament permite o distincție ușoară între DLL-urile create pentru
diverse „subplatforme”: native, cygwin, uwin, pw etc. Pentru
De exemplu, DLL-urile cygwin folosesc de obicei „--dll-search-prefix=cyg”.
[Această opțiune este specifică portului vizat i386 PE al
linker]
--enable-auto-import
Faceți legături sofisticate de „_symbol” la „__imp__symbol” pentru DATE
importă din DLL-uri și creează simbolurile necesare atunci când
construirea bibliotecilor de import cu acele exporturi de DATE. Notă: Utilizarea
extensia „import automat” va cauza secțiunea de text a
fișierul imagine pentru a putea fi scris. Acest lucru nu este conform cu PE-
Specificația formatului COFF publicată de Microsoft.
Notă - utilizarea extensiei „import automat” va cauza, de asemenea, numai citire
date care ar fi în mod normal plasate în secțiunea .rdata să fie
plasat în secțiunea .data în schimb. Asta pentru a funcționa
în jurul unei probleme cu consts care este descrisă aici:
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
În general, folosirea „import automat” va „funcționa” -- dar uneori tu
poate vedea acest mesaj:
„variabila „ ” nu poate fi importată automat. Vă rugăm să citiți
documentația pentru „--enable-auto-import” de ld 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
permiteți doar unul). Instanțe în care acest lucru poate apărea includ accese
la câmpurile membre ale variabilelor struct importate dintr-un DLL, de asemenea
ca folosind un index constant într-o variabilă matrice importată din a
DLL. Orice variabilă cu mai multe cuvinte (matrice, structuri, lung lung etc.) poate
declanșează această condiție de eroare. Oricum, indiferent de exact
tipul de date al variabilei exportate ofensatoare, ld va detecta întotdeauna
ea, emite avertismentul și ieși.
Există mai multe modalități de a aborda această dificultate, indiferent de
tipul de date al variabilei exportate:
O modalitate este să utilizați comutatorul --enable-runtime-pseudo-reloc. Aceasta pleacă
sarcina de a ajusta referințele din codul clientului pentru runtime
mediu, deci această metodă funcționează numai în mediul de rulare
acceptă această caracteristică.
O a doua soluție este de a forța una dintre „constante” să fie a
variabilă -- adică necunoscută și neoptimizabilă la momentul compilării.
Pentru tablouri, există două posibilități: a) faceți indexat (the
adresa matricei) o variabilă sau b) faceți indexul „constant” a
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 structuri (și majoritatea celorlalte tipuri de date cu mai multe cuvinte) singura opțiune
este de a face structura în sine (sau lung lung, sau ...)
variabilă:
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
„import automat” pentru simbolul ofensator și marcați-l cu
„__declspec(dllimport)”. Cu toate acestea, în practică, aceasta necesită utilizarea
timp 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 o bibliotecă statică. În a face alegerea
între diferitele metode de rezolvare a 'adresei directe cu
problema de compensare constantă, ar trebui să luați în considerare lumea reală tipică
utilizare:
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
utilizați o interfață funcțională mai degrabă decât o interfață de date pentru
variabile ofensatoare (de ex set_foo() și get_foo() accesor
funcții). [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 importurile de DATE din DLL-uri. [Această opțiune este
specific portului vizat i386 PE al linkerului]
--enable-runtime-pseudo-reloc
Dacă codul dvs. conține expresii descrise în --enable-auto-import
secțiunea, adică importurile de DATE din DLL cu offset diferit de zero, aceasta
switch va crea un vector de „pseudo relocari de rulare” care
poate fi folosit de mediul de rulare pentru a ajusta referințele la acestea
datele din 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 decalaj diferit de zero
din DLL-uri. [Această opțiune 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
linker]
--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ă portului vizat i386 PE al
linkerul]
--grămadă rezervă
--grămadă rezervă,comite
Specificați numărul de octeți de memorie de rezervat (și opțional
commit) pentru a fi folosit ca stivă pentru acest program. Valoarea implicită este de 2 MB
rezervat, 4K angajat. [Această opțiune este specifică i386 PE
portul vizat al linkerului]
--subsistem care
--subsistem care:major
--subsistem care:major.minor
Specifică subsistemul sub care se va executa programul. The
valori juridice pentru care sunt „native”, „windows”, „consola”, „posix”,
și „xbox”. Opțional, puteți seta și 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”.
din antetul fișierului PE: [Aceste opțiuni sunt specifice PE vizat
porturile 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 aspectul spațiului de adrese
randomizare (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. Acest
caracteristica 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 aceasta
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. Aceasta este valoarea implicită
comportament, deoarece se potrivește cu codul moștenit și înseamnă că imaginea
va funcționa cu alte instrumente proprietare. Problema cu asta
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 fi folosit pentru a introduce o valoare zero pentru
marca temporală, aceasta asigurând că binarele produse din identice
sursele se vor compara identic.
Ținta C6X uClinux folosește un format binar numit DSBT pentru a suporta
biblioteci partajate. Fiecare bibliotecă partajată din sistem trebuie să aibă un
indice unic; toate executabilele folosesc un index de 0.
--dsbt-size mărimea
Această opțiune setează numărul de intrări în DSBT al curentului
bibliotecă executabilă sau partajată la mărimea. Implicit este crearea unui
tabel cu 64 de intrări.
--dsbt-index index
Această opțiune setează indexul DSBT al executabilului curent sau partajat
bibliotecă la index. Valoarea implicită este 0, ceea ce este adecvat pentru
generarea de executabile. Dacă o bibliotecă partajată este generată cu a
Indexul DSBT de 0, relocurile „R_C6000_DSBT_INDEX” sunt copiate în
fișierul de ieșire.
--no-merge-exidx-entries comutatorul dezactivează îmbinarea
intrările exidx adiacente din cadrul informațiilor de desfășurare.
Linkerii 68HC11 și 68HC12 acceptă opțiuni specifice pentru controlul
cartografierea comutării băncii de memorie și generarea codului de trambulină.
--fara-trambulina
Această opțiune dezactivează generarea trambulinei. Implicit a
trambulină este generată pentru fiecare funcție departe care este numită folosind
o instrucțiune „jsr” (acest lucru se întâmplă atunci când un pointer către o funcție departe
este luat).
--fereastră-bancă nume
Această opțiune indică linkerului numele regiunii de memorie
în MEMORIE specificație care descrie fereastra băncii de memorie.
Definiția unei astfel de regiuni este apoi utilizată de linker pentru a calcula
paginare și adrese în fereastra de memorie.
Următoarele opțiuni sunt acceptate pentru a controla gestionarea GOT
generație la conectarea pentru 68K ținte.
--am=tip
Această opțiune îi spune linkerului ce schemă de generare GOT să folosească.
tip ar trebui să fie unul dintre 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 instrucțiunile microMIPS
generație la conectarea pentru ținte MIPS.
--insn32
--NO-INSN32
Aceste opțiuni controlează alegerea instrucțiunilor microMIPS utilizate în
cod generat de linker, cum ar fi cel din PLT sau lazy
cioturi de legare, sau în relaxare. Dacă --insn32 este folosit, apoi
linker folosește numai codificări de instrucțiuni pe 32 de biți. Implicit sau dacă
--NO-INSN32 este utilizat, sunt utilizate 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
fișiere de intrare binare; această metodă reușește adesea, dar există potențial
ambiguități, deoarece nu există nicio metodă de a se asigura că numărul magic
folosit pentru a specifica formatele obiect-fișier este unic. Însă
procedura de configurare pentru BFD pe fiecare sistem plasează cele convenționale
format pentru acel sistem primul în lista de căutare, așa că ambiguitățile sunt
hotărât î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 scriptul implicit de linker. Puteți enumera cele disponibile
emulări cu --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 va fi implicit
pentru a nu dezmembra simbolurile. Această variabilă de mediu este utilizată într-un
mod similar cu programul de înveliș al linkerului „gcc”. Implicit poate
fi depășit de --descurca și --nu-demangle opțiuni.
Utilizați i686-linux-gnu-ld online folosind serviciile onworks.net