Skip to main content

Alles over het Linux / Unix-commando: ld

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

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

NAAM

ld - Gebruik van LD, de GNU-linker

KORTE INHOUD

ld opties objFile …

OMSCHRIJVING

ld combineert een aantal object- en archiefbestanden, verplaatst hun gegevens en koppelt symboolreferenties aan elkaar. Meestal is de laatste stap bij het compileren van een programma om te startenld.

ld accepteert Linker Command Language-bestanden geschreven in een superset van AT & T's Link Editor Command Language-syntaxis, om expliciete en totale controle over het koppelingsproces te bieden.

Deze man-pagina beschrijft niet de opdrachttaal; zie deld invoer in "info", of de handleiding ld: de GNU-linker, voor volledige details over de commandotaal en over andere aspecten van de GNU-linker.

Deze versie vanld gebruikt de universele BFD-bibliotheken om op objectbestanden te werken. Dit staat toeld objectbestanden in veel verschillende indelingen lezen, combineren en schrijven --- bijvoorbeeld COFF of "a.out". Verschillende formaten kunnen aan elkaar worden gekoppeld om elk beschikbaar soort objectbestand te produceren.

Afgezien van zijn flexibiliteit, is de GNU-linker meer behulpzaam dan andere linkers bij het verschaffen van diagnostische informatie. Veel linkers laten de uitvoering onmiddellijk na het tegenkomen van een fout; wanneer mogelijk,ld blijft uitvoeren, zodat u andere fouten kunt identificeren (of, in sommige gevallen, om een ​​uitvoerbestand te krijgen ondanks de fout).

De GNU-linkerld is bedoeld om een ​​breed scala aan situaties te dekken en om zo compatibel mogelijk te zijn met andere linkers. Het resultaat is dat je veel keuzes hebt om het gedrag te beheersen.

OPTIES

De linker ondersteunt een overvloed aan opdrachtregelopties, maar in de praktijk worden weinigen van hen gebruikt in een bepaalde context. Bijvoorbeeld, een frequent gebruik vanld is om standaard Unix-objectbestanden op een standaard, ondersteund Unix-systeem te koppelen. Op een dergelijk systeem, om een ​​bestand "hello.o" te linken:

ik wil /lib/crt0.o hello.o -lc

Dit verteltld om een ​​bestand te maken met de naam uitgang als het resultaat van het koppelen van het bestand "/lib/crt0.o" met "hello.o" en de bibliotheek "libc.a", die zal komen van de standaard zoekmappen. (Zie de bespreking van del onderstaande optie.)

Enkele van de opdrachtregelopties voorld kan op elk punt in de opdrachtregel worden opgegeven. Echter, opties die naar bestanden verwijzen, zoalsl of-T, omdat het bestand wordt gelezen op het punt waarop de optie op de opdrachtregel wordt weergegeven, relatief aan de objectbestanden en andere bestandsopties. Het herhalen van niet-bestandsopties met een ander argument zal ofwel geen verder effect hebben, ofwel eerdere occurrences van die optie (die verder naar links op de opdrachtregel) vervangen. Opties die meer dan één keer zinvol zijn gespecificeerd, worden vermeld in de onderstaande beschrijvingen.

Niet-optieargumenten zijn objectbestanden of archieven die aan elkaar moeten worden gekoppeld. Ze kunnen volgen, voorafgaan of worden ingemengd met opdrachtregelopties, behalve dat een objectbestandargument niet tussen een optie en het bijbehorende argument wordt geplaatst.

Gewoonlijk wordt de linker aangeroepen met ten minste één objectbestand, maar u kunt andere vormen van binaire invoerbestanden opgeven metl, -Ren de scriptopdrachttaal. Als Nee binaire invoerbestanden zijn al opgegeven, de linker produceert geen uitvoer en geeft het bericht afGeen invoerbestanden.

Als de linker het formaat van een objectbestand niet kan herkennen, neemt het aan dat het een linkerscript is. Een script dat op deze manier wordt gespecificeerd, vergroot het belangrijkste linkerscript dat voor de koppeling wordt gebruikt (het standaard linkerscript of het script dat is opgegeven door het te gebruiken-T). Met deze functie kan de linker koppelen aan een bestand dat een object of een archief lijkt, maar eigenlijk definieert het alleen enkele symboolwaarden, of gebruikt hij "INVOER" of "GROEP" om andere objecten te laden. Merk op dat het op deze manier specificeren van een script alleen maar het belangrijkste linkerscript vergroot; gebruik de-T optie om het standaard linkerscript volledig te vervangen.

Voor opties waarvan de naam één enkele letter is, moeten optieargumenten de optie-letter volgen zonder tussenliggende witruimte in te voeren, of worden gegeven als afzonderlijke argumenten onmiddellijk na de optie waarvoor ze zijn vereist.

Voor opties waarvan de naam meerdere letters is, kan één streepje of twee voorafgaan aan de optienaam; bijvoorbeeld,-trace-symbool en--trace-symbool zijn gelijkwaardig. Let op - er is één uitzondering op deze regel. Meerdere letteropties die beginnen met een kleine letter 'o' kunnen slechts vooraf worden gegaan door twee streepjes. Dit is om verwarring met de te verminderen-O keuze. Dus bijvoorbeeld-omagic stelt de uitvoerbestandsnaam in opmagie terwijl--omagic stelt de NMAGIC-vlag in op de uitvoer.

Argumenten voor meerletterige opties moeten ofwel gescheiden zijn van de optienaam door een gelijkteken, ofwel worden gegeven als afzonderlijke argumenten onmiddellijk na de optie die ze vereist. Bijvoorbeeld,--tracesymbool foo en--trace-symbol foo zijn gelijkwaardig. Unieke afkortingen van de namen van meerletterige opties worden geaccepteerd.

Opmerking - als de linker indirect wordt aangeroepen, via een compilerstuurprogramma (bijvgcc) dan moeten alle linker commandoregel-opties worden voorafgegaan door-Wl, (of wat geschikt is voor de betreffende compilerdriver) zoals dit:

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

Dit is belangrijk, omdat anders het stuurprogramma van de compiler de linkeropties in stilte kan laten vallen, wat resulteert in een slechte link.

Hier is een tabel met de generieke opdrachtregelopties die worden geaccepteerd door de GNU-linker:

-een trefwoord

Deze optie wordt ondersteund voor HP / UX-compatibiliteit. De trefwoord argument moet een van de touwtjes zijnarchief, gedeeldeofstandaard. -aarchive is functioneel equivalent aan-Bstaticen de andere twee zoekwoorden zijn functioneel equivalent aan-Bdynamic. Deze optie kan een onbeperkt aantal keren worden gebruikt.

-EEN architectuur

--architecture = architectuur

In de huidige release vanld, deze optie is alleen nuttig voor de Intel 960-familie van architecturen. In datld configuratie, de architectuur argument identificeert de specifieke architectuur in de 960-familie, maakt enkele voorzorgsmaatregelen mogelijk en wijzigt het zoekpad van de archiefbibliotheek.

Toekomstige releases vanld kan soortgelijke functionaliteit ondersteunen voor andere architectuurfamilies.

-b invoer formaat

--format = invoer formaat

ld kan worden geconfigureerd om meer dan één soort objectbestand te ondersteunen. Als jouwld is op deze manier geconfigureerd, u kunt de-b optie om het binaire formaat op te geven voor invoerobjectbestanden die deze optie op de opdrachtregel volgen. Zelfs wanneerld is geconfigureerd om alternatieve objectindelingen te ondersteunen, meestal hoeft u dit niet op te geven, zoalsld moet worden geconfigureerd om als standaard invoerformaat het meest gebruikelijke formaat op elke machine te verwachten. invoer formaat is een tekstreeks, de naam van een bepaalde indeling die wordt ondersteund door de BFD-bibliotheken. (U kunt de beschikbare binaire formaten weergeven metobjdump -i.)

U kunt deze optie gebruiken als u bestanden met een ongebruikelijke binaire indeling koppelt. Je kan ook gebruiken-b om formaten expliciet te schakelen (bij het koppelen van objectbestanden van verschillende formaten), door ze op te nemen-b invoer formaat voor elke groep objectbestanden in een bepaald formaat.

Het standaardformaat is afkomstig van de omgevingsvariabele "GNUTARGET".

U kunt ook het invoerformaat van een script definiëren met behulp van de opdracht "TARGET";

-C MRI-commandfile

--mri-script = MRI-commandfile

Voor compatibiliteit met linkers geproduceerd door MRI,ld accepteert scriptbestanden geschreven in een alternatieve, beperkte opdrachttaal, beschreven in het gedeelte MRI Compatible Script Files van GNU LD-documentatie. Introduceer MRI-scriptbestanden met de optie-C; gebruik de-T optie om linkerscripts uit te voeren die zijn geschreven in het algemene doelld scripttaal. Als MRI-cmdfile bestaat niet,ldzoekt het in de mappen gespecificeerd door een-L opties.

-d

-dc

-dp

Deze drie opties zijn equivalent; meerdere formulieren worden ondersteund voor compatibiliteit met andere linkers. Ze wijzen ruimte toe aan algemene symbolen, zelfs als een verplaatsbaar uitvoerbestand is opgegeven (met-r). Het scriptcommando "FORCE_COMMON_ALLOCATION" heeft hetzelfde effect.

-e binnenkomst

--entry = binnenkomst

Gebruik binnenkomst als het expliciete symbool voor het begin van de uitvoering van uw programma, in plaats van het standaard startpunt. Als er geen symbool met de naam is binnenkomst , de linker zal proberen te ontleden binnenkomst als een nummer, en gebruik dat als het adres (het nummer wordt geïnterpreteerd in basis 10, je mag een leidende tekst gebruiken0x voor basis 16, of een leidende0 voor basis 8).

-E

--export-dynamische

Wanneer u een dynamisch gekoppeld uitvoerbaar bestand maakt, voegt u alle symbolen toe aan de dynamische symbooltabel. De dynamische symbooltabel is de reeks symbolen die tijdens runtime zichtbaar is van dynamische objecten.

Als u deze optie niet gebruikt, bevat de dynamische symbooltabel normaal alleen die symbolen waarnaar wordt verwezen door een dynamisch object dat in de koppeling wordt vermeld.

Als u "dlopen" gebruikt om een ​​dynamisch object te laden dat moet verwijzen naar de symbolen die door het programma zijn gedefinieerd, in plaats van een ander dynamisch object, dan zult u deze optie waarschijnlijk moeten gebruiken wanneer u het programma zelf koppelt.

U kunt het versiescript ook gebruiken om te bepalen welke symbolen moeten worden toegevoegd aan de dynamische symbooltabel als het uitvoerformaat dit ondersteunt. Zie de beschrijving van--version-script @ in ref {VERSION}.

-EB

Link big-endian-objecten. Dit beïnvloedt het standaard uitvoerformaat.

-EL

Koppel little-endian-objecten. Dit beïnvloedt het standaard uitvoerformaat.

-f

--auxiliary naam

Wanneer u een ELF-gezamenlijk object maakt, stelt u het interne veld DT_AUXILIARY in op de opgegeven naam. Dit vertelt de dynamische linker dat de symbolentabel van het gedeelde object moet worden gebruikt als een hulpfilter in de symbolentabel van het gedeelde object naam .

Als u later een programma koppelt aan dit filterobject, ziet u bij het uitvoeren van het programma het DT_AUXILIARY-veld. Als de dynamische linker alle symbolen van het filterobject oplost, controleert deze eerst of er een definitie bestaat in het gedeelde object naam . Als er een is, wordt deze gebruikt in plaats van de definitie in het filterobject. Het gedeelde object naam hoeft niet te bestaan. Dus het gedeelde object naam kan worden gebruikt om een ​​alternatieve implementatie van bepaalde functies te bieden, bijvoorbeeld voor foutopsporing of voor machinespecifieke prestaties.

Deze optie kan meerdere keren worden opgegeven. De DT_AUXILIARY-vermeldingen worden gemaakt in de volgorde waarin ze op de opdrachtregel worden weergegeven.

-F naam

--filter naam

Wanneer u een ELF-gezamenlijk object maakt, stelt u het interne veld DT_FILTER in op de opgegeven naam. Dit vertelt de dynamische linker dat de symbolentabel van het gedeelde object dat wordt gemaakt, moet worden gebruikt als een filter in de symbolentabel van het gedeelde object naam .

Als u later een programma koppelt aan dit filterobject, ziet u het DT_FILTER-veld wanneer u het programma uitvoert. De dynamische linker zal symbolen volgens de symbolentabel van het filterobject zoals gebruikelijk oplossen, maar het zal in werkelijkheid linken naar de definities die in het gedeelde object zijn gevonden naam . Het filterobject kan dus worden gebruikt om een ​​subset van de door het object geleverde symbolen te selecteren naam .

Sommige oudere linkers gebruikten het-F optie in een compilatietoolchain voor het opgeven van de indeling van het objectbestand voor zowel invoer- als uitvoerobjectbestanden. De GNU-linker gebruikt hiervoor andere mechanismen: de-b, --formaat, --oformat opties, de opdracht "TARGET" in linkerscripts en de omgevingsvariabele "GNUTARGET". De GNU-linker negeert de-F optie wanneer u geen ELF gedeeld object maakt.

-fini naam

Wanneer u een ELF-uitvoerbaar of gedeeld object maakt, belt u NAME wanneer het uitvoerbare of gedeelde object wordt leeggemaakt door DT_FINI in te stellen op het adres van de functie. Standaard gebruikt de linker "_fini" als de functie om te bellen.

-g

Genegeerd. Voorzien in compatibiliteit met andere hulpmiddelen.

G waarde

--gpsize = waarde

Stel de maximale grootte in van objecten die moeten worden geoptimaliseerd met behulp van het GP-register grootte . Dit is alleen zinvol voor objectbestandsformaten zoals MIPS ECOFF, die het plaatsen van grote en kleine objecten in verschillende secties ondersteunen. Dit wordt genegeerd voor andere bestandsindelingen van objecten.

-h naam

-soname = naam

Wanneer u een ELF-gezamenlijk object maakt, stelt u het interne veld DT_SONAME in op de opgegeven naam. Wanneer een uitvoerbaar bestand is gekoppeld aan een gedeeld object met een veld DT_SONAME, dan zal het dynamische object tijdens het uitvoeren van het uitvoerbare bestand proberen het gedeelde object te laden dat is opgegeven door het veld DT_SONAME in plaats van het gebruik van de bestandsnaam die aan de linker is gegeven.

-ik

Voer een incrementele link uit (zelfde als optie-r).

-in het naam

Wanneer u een ELF-uitvoerbaar of gedeeld object maakt, roept u NAME aan wanneer het uitvoerbare of gedeelde object wordt geladen door DT_INIT in te stellen op het adres van de functie. Standaard gebruikt de linker "_init" als de functie om te bellen.

l archief

--library = archief

Voeg een archiefbestand toe archief naar de lijst met te koppelen bestanden. Deze optie kan een onbeperkt aantal keren worden gebruikt.ld zal zijn pad-lijst doorzoeken op voorvallen van "libarchive.a" voor elke archief gespecificeerd.

Op systemen die gedeelde bibliotheken ondersteunen,ld kan ook zoeken naar bibliotheken met andere extensies dan ".a". Specifiek, op ELF en SunOS-systemen,ld zal een map zoeken naar een bibliotheek met een extensie ".so" voordat wordt gezocht naar een map met de extensie ".a". Volgens afspraak geeft een extensie ".so" een gedeelde bibliotheek aan.

De linker zal slechts één keer in een archief zoeken, op de locatie waar het op de opdrachtregel is gespecificeerd. Als het archief een symbool definieert dat ongedefinieerd was in een object dat vóór het archief op de opdrachtregel verscheen, zal de linker de juiste bestanden van het archief bevatten. Een ongedefinieerd symbool in een object dat later op de opdrachtregel verschijnt, zal er echter niet voor zorgen dat de linker het archief opnieuw doorzoekt.

Zie de-( optie voor een manier om de linker meerdere keren te laten zoeken in archieven.

U kunt hetzelfde archief meerdere keren weergeven op de opdrachtregel.

Dit type zoeken naar archieven is standaard voor Unix-linkers. Als u echter gebruiktld onAIX, merk op dat dit verschilt van het gedrag van de AIX-linker.

-L searchdir

--library-path = searchdir

Voeg pad toe searchdir naar de lijst met paden dield zal zoeken naar archiefbibliotheken enld beheerscripts. U kunt deze optie een onbeperkt aantal keren gebruiken. De directory's worden doorzocht in de volgorde waarin ze op de opdrachtregel zijn opgegeven. Directories opgegeven op de opdrachtregel worden doorzocht vóór de standaardmappen. Allemaal-L opties zijn van toepassing op iedereenl opties, ongeacht de volgorde waarin de opties worden weergegeven.

Als searchdir begint met "=", dan wordt "=" vervangen door de sysroot-voorvoegsel , een pad dat is opgegeven wanneer de linker is geconfigureerd.

De standaardset paden doorzocht (zonder dat deze is opgegeven met-L) hangt af van welke emulatiemodusld gebruikt, en in sommige gevallen ook over hoe het is geconfigureerd.

De paden kunnen ook worden opgegeven in een koppelingsscript met de opdracht "SEARCH_DIR". Op deze manier gespecificeerde directories worden doorzocht op het punt waarop het linkerscript in de opdrachtregel verschijnt.

-m wedijver

Emuleer het wedijver linker. U kunt de beschikbare emulaties weergeven met de--verbose of-Vopties.

Als het-m optie wordt niet gebruikt, de emulatie wordt overgenomen uit de omgevingsvariabele "LDEMULATION", als die is gedefinieerd.

Anders hangt de standaardemulatie af van hoe de linker is geconfigureerd.

-M

--print-map

Druk een linkmap af naar de standaarduitvoer. Een link map geeft informatie over de link, inclusief het volgende:

*

Waarobjectbestanden en -symbolen worden in het geheugen toegewezen.

*

Hoe gemeenschappelijke symbolen worden toegewezen.

*

Alle archiefleden opgenomen in de link, met vermelding van het symbool waardoor het archieflid werd binnengehaald.

-n

--nmagic

Schakel pagina-uitlijning van secties uit en markeer de uitvoer indien mogelijk als "NMAGIC".

-N

--omagic

Stel de tekst- en gegevenssecties zodanig in dat ze leesbaar en beschrijfbaar zijn. Het paginasegment moet ook niet worden uitgelijnd en koppeling naar gedeelde bibliotheken moet worden uitgeschakeld. Als het uitvoerformaat de magische getallen in Unix-stijl ondersteunt, markeert u de uitvoer als "OMAGIC".

--no-omagic

Deze optie ontkent de meeste effecten van de-N keuze. Hiermee wordt de tekstsectie ingesteld als alleen-lezen en wordt het gegevenssegment gedwongen om uitgelijnd te worden. Opmerking - deze optie maakt het niet mogelijk om te linken met gedeelde bibliotheken. Gebruik-Bdynamic voor deze.

-O uitgang

--output = uitgang

Gebruik uitgang als de naam voor het programma geproduceerd doorld; als deze optie niet is opgegeven, de naam a.out wordt standaard gebruikt. Het scriptcommando "OUTPUT" kan ook de naam van het uitvoerbestand specificeren.

-O niveau

Als niveau is een numerieke waarde groter dan nulld optimaliseert de uitvoer. Dit kan aanzienlijk langer duren en daarom waarschijnlijk alleen worden ingeschakeld voor het laatste binaire bestand.

-q

--emit-relocs

Verhuizing secties en inhoud achterlaten in volledig verbonden exececutables. Analyse- en optimalisatietools voor postkoppeling kunnen deze informatie nodig hebben om de juiste wijzigingen in uitvoerbare bestanden uit te voeren. Dit resulteert in grotere uitvoerbare bestanden.

Deze optie wordt momenteel alleen ondersteund op ELF-platforms.

-r

--relocateable

Genereer verplaatsbare uitvoer --- d.w.z. genereer een uitvoerbestand dat op zijn beurt kan dienen als invoer voorld. Dit wordt vaak genoemd gedeeltelijke koppeling . Als een neveneffect, in omgevingen die standaard Unix-magische getallen ondersteunen, stelt deze optie ook het magische getal van het uitvoerbestand in op "OMAGIC". Als deze optie niet is opgegeven, wordt een absoluut bestand geproduceerd. Bij het koppelen van C ++ -programma's, deze optie zal niet verwijzingen naar constructeurs oplossen; om dat te doen, gebruik-ur.

Wanneer een invoerbestand niet hetzelfde formaat heeft als het uitvoerbestand, wordt gedeeltelijke koppeling alleen ondersteund als dat invoerbestand geen verplaatsingen bevat. Verschillende uitvoerformaten kunnen verdere beperkingen hebben; sommige 'a.out'-gebaseerde indelingen ondersteunen bijvoorbeeld helemaal geen gedeeltelijke koppeling met invoerbestanden in andere indelingen.

Deze optie doet hetzelfde als-ik.

-R bestandsnaam

--just-symbols = bestandsnaam

Lees symboolnamen en hun adressen van bestandsnaam , maar verplaats het niet of neem het niet op in de uitvoer. Hierdoor kan uw uitvoerbestand symbolisch verwijzen naar absolute geheugenlocaties die zijn gedefinieerd in andere programma's. U kunt deze optie meerdere keren gebruiken.

Voor compatibiliteit met andere ELF-linkers, als de-R optie wordt gevolgd door een mapnaam, in plaats van een bestandsnaam, wordt het behandeld als de-rpath keuze.

-s

--strip-all

Laat alle symboolinformatie uit het uitvoerbestand weg.

-S

--strip-debug

Laat debugger-symboolinformatie (maar niet alle symbolen) weg van het uitvoerbestand.

-t

--spoor

Druk de namen van de invoerbestanden af ​​alsld verwerkt ze.

-T Script bestand

--script = Script bestand

Gebruik Script bestand als het linkerscript. Dit script vervangtldstandaard linkerscript (in plaats van toe te voegen), dus commandfile moet alles opgeven dat nodig is om het uitvoerbestand te beschrijven. Als Script bestand bestaat niet in de huidige map, "ld" zoekt het in de mappen die door voorgaande zijn opgegeven-L opties. Meerdere-T opties accumuleren.

-u symbool

--undefined = symbool

Dwingen symbool om in het uitvoerbestand te worden ingevoerd als een ongedefinieerd symbool. Dit kan bijvoorbeeld leiden tot koppeling van extra modules uit standaardbibliotheken.-u kan worden herhaald met verschillende optieargumenten om extra niet-gedefinieerde symbolen in te voeren. Deze optie is gelijk aan de opdracht "EXTERN" van het linkerscript.

-ur

Voor iets anders dan C ++ -programma's is deze optie equivalent-r: het genereert verplaatsbare uitvoer --- d.w.z. een uitvoerbestand dat op zijn beurt kan dienen als invoer voorld. Bij het koppelen van C ++ -programma's,-ur doet verwijzingen naar constructeurs oplossen, in tegenstelling tot-r. Het werkt niet om te gebruiken-ur op bestanden die zelf gekoppeld waren-ur; Zodra de constructortabel is gebouwd, kan deze niet worden toegevoegd aan. Gebruik-ur alleen voor de laatste deellink, en-r voor de anderen.

--unique = SECTIE

Creëert een apart uitvoergedeelte voor elke aanpassing van de invoergedeelten SECTIE of als het optionele jokerteken SECTIE argument ontbreekt, voor elk wees-invoergedeelte. Een weessectie is er een die niet specifiek wordt genoemd in een linkerscript. U kunt deze optie meerdere keren gebruiken op de opdrachtregel; Het voorkomt het normaal samenvoegen van invoersecties met dezelfde naam, waarbij de uitvoergedeelte-toewijzingen in een linkerscript worden overschreven.

-v

--versie

-V

Toon het versienummer voorld. De-V optie toont ook de ondersteunde emulaties.

-X

--discard-all

Verwijder alle lokale symbolen.

-X

--discard-locals

Verwijder alle tijdelijke lokale symbolen. Voor de meeste doelen zijn dit allemaal lokale symbolen waarvan de namen beginnenL.

-y symbool

--trace-symbol symbool

Druk de naam af van elk gekoppeld bestand waarin symbool komt naar voren. Deze optie kan een onbeperkt aantal keren worden gegeven. Op veel systemen is het nodig om een ​​onderstrepingsteken aan te brengen.

Deze optie is handig als u een ongedefinieerd symbool in uw link hebt maar niet weet waar de referentie vandaan komt.

Y pad

Toevoegen pad naar het standaard bibliotheekzoekpad. Deze optie bestaat voor Solaris-compatibiliteit.

-z trefwoord

De herkende trefwoorden zijn "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" en "nocopyreloc ". De andere sleutelwoorden worden genegeerd voor Solaris-compatibiliteit. "initfirst" markeert het object dat als eerste moet worden geïnitialiseerd tijdens runtime vóór andere objecten."interpose" markeert het object dat de symbooltabel tussenvoegt vóór alle symbolen behalve het primaire uitvoerbare bestand. "loadfltr" markeert het object dat de filtees onmiddellijk tijdens runtime worden verwerkt. "nodefaultlib" markeert het object dat het zoeken naar afhankelijkheden van dit object negeert eventuele standaardbibliotheekzoekpaden. "nodelete" -markeringen: het object mag tijdens runtime niet worden verwijderd. "nodlopen" markeert het object niet beschikbaar voor "dlopen". "nodump" markeert het object kan niet worden gedumpt door "dldump". "now" markeert het object met de niet-lui runtimebinding. "oorsprong" markeert het object kan $ ORIGIN bevatten. "defs" staat niet-gedefinieerde symbolen toe. "muldefs" staat meerdere definities toe. "combreloc" combineert meerdere reloc secties en sorteert ze om het cachen van dynamische symbolen mogelijk te maken.

"nocombreloc" schakelt meerdere reloc secties combineren uit. "nocopyreloc" schakelt de productie van kopieverslagelementen uit.

-( archief -)

--start-groep archief --end-groep

De archief zou een lijst met archiefbestanden moeten zijn. Dit kunnen expliciete bestandsnamen zijn oflopties.

De opgegeven archieven worden herhaaldelijk doorzocht totdat er geen nieuwe ongedefinieerde verwijzingen zijn gemaakt. Normaal wordt een archief slechts eenmaal doorzocht in de volgorde waarin het op de opdrachtregel is gespecificeerd. Als een symbool in dat archief nodig is om een ​​ongedefinieerd symbool op te lossen waarnaar door een object in een archief wordt verwezen dat later op de opdrachtregel wordt weergegeven, kan de linker die verwijzing niet oplossen. Door de archieven te groeperen, worden ze allemaal herhaaldelijk doorzocht totdat alle mogelijke referenties zijn opgelost.

Het gebruik van deze optie heeft aanzienlijke prestatiekosten. Het is het beste om het alleen te gebruiken als er onvermijdelijke circulaire verwijzingen zijn tussen twee of meer archieven.

ccept-unknown-ingang-arch

--no-accepteren-unknown-input-arch

Vertelt de linker om invoerbestanden te accepteren waarvan de architectuur niet kan worden herkend. De aanname is dat de gebruiker weet wat hij doet en opzettelijk wil koppelen in deze onbekende invoerbestanden. Dit was het standaardgedrag van de linker, vóór release 2.14. Het standaardgedrag vanaf release 2.14 is om dergelijke invoerbestanden te weigeren, en dus deccept-unknown-ingang-arch optie is toegevoegd om het oude gedrag te herstellen.

-assert trefwoord

Deze optie wordt genegeerd voor SunOS-compatibiliteit.

-Bdynamic

-dy

-call_shared

Link met dynamische bibliotheken. Dit is alleen zinvol op platforms waarvoor gedeelde bibliotheken worden ondersteund. Deze optie is normaal de standaard op dergelijke platforms. De verschillende varianten van deze optie zijn voor compatibiliteit met verschillende systemen. U kunt deze optie meerdere keren gebruiken op de opdrachtregel: dit is van invloed op het zoeken naar bibliothekenl opties die erop volgen.

-Bgroup

Stel de vlag "DF_1_GROUP" in het item "DT_FLAGS_1" in het dynamische gedeelte in. Dit zorgt ervoor dat de runtime-linker lookups in dit object verwerkt en dat de afhankelijkheden ervan alleen in de groep worden uitgevoerd.--no-undefined is impliciet. Deze optie is alleen zinvol op ELF-platforms die gedeelde bibliotheken ondersteunen.

-Bstatic

-dn

-non_shared

-statisch

Link niet tegen gedeelde bibliotheken. Dit is alleen zinvol op platforms waarvoor gedeelde bibliotheken worden ondersteund. De verschillende varianten van deze optie zijn voor compatibiliteit met verschillende systemen. U kunt deze optie meerdere keren gebruiken op de opdrachtregel: dit is van invloed op het zoeken naar bibliothekenl opties die erop volgen.

-Bsymbolic

Wanneer u een gedeelde bibliotheek maakt, koppelt u verwijzingen naar globale symbolen aan de definitie in de gedeelde bibliotheek, indien aanwezig. Normaal gesproken is het mogelijk dat een programma dat is gekoppeld aan een gedeelde bibliotheek, de definitie in de gedeelde bibliotheek overschrijft. Deze optie is alleen zinvol op ELFplatforms die gedeelde bibliotheken ondersteunen.

--check-profielen

--no-check-profielen

Vraagt ​​de linker niet om sectieadressen te controleren nadat ze zijn toegewezen om te zien of er overlappingen zijn. Normaal zal de linker deze controle uitvoeren, en als het overlappingen vindt, zal het geschikte foutmeldingen produceren. De linker weet wel en houdt rekening met secties in overlays. Het standaardgedrag kan worden hersteld met behulp van de opdrachtregeloptie--check-profielen.

--cref

Geef een kruistabel op. Als een verbindingskaartbestand wordt gegenereerd, wordt de kruisverwijzingstabel afgedrukt naar het kaartbestand. Anders wordt het afgedrukt op de standaarduitvoer.

Het formaat van de tabel is opzettelijk eenvoudig, zodat het indien nodig gemakkelijk door een script kan worden verwerkt. De symbolen worden afgedrukt, gesorteerd op naam. Voor elk symbool wordt een lijst met bestandsnamen gegeven. Als het symbool is gedefinieerd, is het eerste weergegeven bestand de locatie van de definitie. De overige bestanden bevatten verwijzingen naar het symbool.

--no definiëren-common

Met deze optie wordt de toewijzing van adressen aan veelgebruikte symbolen geblokkeerd. Het scriptcommando "INHIBIT_COMMON_ALLOCATION" heeft hetzelfde effect.

De--no definiëren-common optie staat de ontkoppeling toe van de beslissing om adressen toe te wijzen aan gemeenschappelijke symbolen uit de keuze van het uitvoerbestandstype; anders dwingt een niet-verplaatsbaar uitgangstype adressen toe aan gemeenschappelijke symbolen. Gebruik makend van--no definiëren-common staat toe dat algemene symbolen waarnaar wordt verwezen vanuit een gedeelde bibliotheek, alleen adressen krijgen toegewezen aan het hoofdprogramma. Dit elimineert de ongebruikte dubbele ruimte in de gedeelde bibliotheek en voorkomt ook mogelijke verwarring over het oplossen van het verkeerde duplicaat wanneer er veel dynamische modules met gespecialiseerde zoekpaden zijn voor runtime-symboolresolutie.

--defsym symbool = uitdrukking

Maak een globaal symbool in het uitvoerbestand, met daarin het absolute adres gegeven door uitdrukking . U kunt deze optie zo vaak gebruiken als nodig is om meerdere symbolen in de opdrachtregel te definiëren. Een beperkte vorm van rekenen wordt ondersteund voor de uitdrukking in deze context: u kunt een hexadecimale constante opgeven of de naam van een bestaand symbool, of "+" en "-" gebruiken om hexadecimale constanten of symbolen toe te voegen of te verwijderen. Als u meer uitgebreide uitdrukkingen nodig heeft, overweeg dan om de taal van het linkercommando uit een script te gebruiken. Notitie: er zou geen witte ruimte tussen moeten zijn symbool , het gelijkteken (``=''), en uitdrukking .

--demangle = stijl

--no-demangle

Deze opties bepalen of symboolnamen in foutberichten en andere uitvoer worden gedempt. Wanneer de linker wordt gevraagd te ontwarren, probeert het symboolnamen op een leesbare manier weer te geven: het verwijdert toonaangevende onderstrepingstekens als deze worden gebruikt door de indeling van het objectbestand en converteert C ++ gemangelde symboolnamen naar door de gebruiker leesbare namen. Verschillende compilers hebben verschillende mangling-stijlen. Het optionele argument demiling-stijl kan worden gebruikt om een ​​geschikte demangling-stijl voor uw compiler te kiezen. De linker zal standaard ontwarren tenzij de omgevingsvariabeleCOLLECT_NO_DEMANGLE is ingesteld. Deze opties kunnen worden gebruikt om de standaard te negeren.

--dynamic-linker het dossier

Stel de naam van de dynamische linker in. Dit is alleen zinvol bij het genereren van dynamisch gekoppelde ELF-uitvoerbare bestanden. De standaard dynamische linker is normaal correct; gebruik dit niet tenzij u weet wat u doet.

--embedded-relocs

Deze optie is alleen zinvol wanneer MIPS ingesloten PIC-code, gegenereerd door de optie -membedded-pic, wordt gekoppeld aan de GNU-compiler en assembler. Het zorgt ervoor dat de linker een tabel maakt die tijdens runtime kan worden gebruikt om alle gegevens te verplaatsen die statisch zijn geïnitialiseerd naar aanwijzerwaarden. Zie de code in testsuite / ld-empic voor meer informatie.

--fatal-waarschuwingen

Behandel alle waarschuwingen als fouten.

--force-exe-achtervoegsel

Zorg ervoor dat een uitvoerbestand de extensie .exe heeft.

Als een met succes gebouwd volledig gekoppeld uitvoerbestand geen ".exe" - of ".dll" -achtervoegsel heeft, dwingt deze optie de linker om het uitvoerbestand naar een van dezelfde naam te kopiëren met het achtervoegsel ".exe". Deze optie is handig bij het gebruik van ongewijzigde Unix-makefiles op een Microsoft Windows-host, omdat sommige versies van Windows een afbeelding niet uitvoeren tenzij deze eindigt in het achtervoegsel ".exe".

--no-gc-profielen

--gc-profielen

Schakel garbage collection van ongebruikte inputsecties in. Het wordt genegeerd op doelen die deze optie niet ondersteunen. Deze optie is niet compatibel met-r, noch moet het worden gebruikt met dynamische koppeling. Het standaardgedrag (van het niet uitvoeren van deze garbagecollectie) kan worden hersteld door op te geven--no-gc-profielen op de opdrachtregel.

--helpen

Druk een samenvatting van de opdrachtregelopties af op de standaarduitvoer en sluit af.

--target-help

Druk een samenvatting af van alle doelspecifieke opties op de standaarduitvoer en sluit af.

-Kaart Mapfile

Druk een link naar het bestand af Mapfile . Zie de beschrijving van de-M optie, hierboven.

--no-keep-geheugen

ld normaliseert normaal gesproken voor snelheid boven geheugengebruik door de symbooltabellen van invoerbestanden in het geheugen in cache op te slaan. Deze optie verteltld om in plaats daarvan te optimaliseren voor geheugengebruik, door de symbooltabellen indien nodig opnieuw te lezen. Dit kan nodig zijn alsld heeft onvoldoende geheugenruimte tijdens het koppelen van een groot uitvoerbaar bestand.

--no-undefined

-z def

Normaal gesproken zijn bij het maken van een niet-symbolische gedeelde bibliotheek ongedefinieerde symbolen toegestaan ​​die moeten worden opgelost door de runtime-lader. Deze opties verbieden dergelijke ongedefinieerde symbolen.

--allow-multiple-definition

-z muldefs

Normaal gesproken als een symbool meerdere keren wordt gedefinieerd, meldt de linker een fatale fout. Deze opties staan ​​meerdere definities toe en de eerste definitie zal worden gebruikt.

--allow-shlib folder-undefined

Sta ongedefinieerde symbolen toe in gedeelde objecten, zelfs als --no-undefined is ingesteld. Het netto resultaat is dat ongedefinieerde symbolen in normale objecten nog steeds een fout activeren, maar ongedefinieerde symbolen in gedeelde objecten worden genegeerd. De implementatie van no_undefined doet de veronderstelling dat de runtime-linker zal verslikken op ongedefinieerde symbolen. Er is echter ten minste één systeem (BeOS) waarbij ongedefinieerde symbolen in gedeelde bibliotheken normaal zijn, omdat de kernel ze tijdens de laadtijd patcht om te selecteren welke functie het meest geschikt is voor de huidige architectuur. D.W.Z. selecteer dynamisch een geschikte memset-functie. Blijkbaar is het ook normaal dat door HPPA gedeelde bibliotheken ongedefinieerde symbolen worden gebruikt.

--no-undefined-versie

Normaal gesproken negeert de linker het als een symbool een ongedefinieerde versie heeft. Met deze optie zijn symbolen met een niet-gedefinieerde versie niet toegestaan ​​en wordt in plaats daarvan een onherstelbare fout gegenereerd.

--no-warn-mismatch

Normaal gesprokenld geeft een foutmelding als u probeert om invoegbestanden te koppelen die om een ​​of andere reden niet overeenkomen, misschien omdat ze zijn gecompileerd voor verschillende processors of voor verschillende endiannesses. Deze optie verteltld dat het dergelijke fouten in stilte zou toestaan. Deze optie moet alleen met zorg worden gebruikt, in gevallen waarin u een speciale actie hebt ondernomen die ervoor zorgt dat de koppelingsfouten ongepast zijn.

--no-geheel-archief

Schakel het effect van de--whole-archief optie voor volgende archiefbestanden.

--noinhibit-exec

Bewaar het uitvoerbare uitvoerbestand wanneer het nog steeds bruikbaar is.Normaal gesproken zal de linker geen uitvoerbestand produceren als het tijdens het koppelingsproces fouten tegenkomt; het wordt afgesloten zonder een uitvoerbestand te schrijven wanneer er een fout optreedt.

-nostdlib

Zoek alleen bibliotheekmappen die expliciet zijn opgegeven op de opdrachtregel. Bibliotheekmappen die zijn opgegeven in linkerscripts (inclusief linkerscripts die zijn opgegeven op de opdrachtregel) worden genegeerd.

--oformat uitgang-formaat

ld kan worden geconfigureerd om meer dan één soort objectbestand te ondersteunen. Als jouwld is op deze manier geconfigureerd, u kunt de--oformat optie om het binaire formaat voor het uitvoerobjectbestand op te geven. Zelfs wanneerld is geconfigureerd om alternatieve objectindelingen te ondersteunen, meestal hoeft u dit niet op te geven, zoalsld moet worden geconfigureerd om als standaard uitvoerformaat het meest gebruikelijke formaat op elke machine te produceren. uitgang-formaat is een tekstreeks, de naam van een bepaalde indeling die wordt ondersteund door de BFD-bibliotheken. (U kunt de beschikbare binaire formaten weergeven metobjdump -i.) Het scriptcommando "OUTPUT_FORMAT" kan ook het uitvoerformaat specificeren, maar deze optie vervangt het.

-qmagic

Deze optie wordt genegeerd voor Linux-compatibiliteit.

-Qy

Deze optie wordt genegeerd voor SVR4-compatibiliteit.

--kom tot rust

Een optie met machine-afhankelijke effecten. Deze optie wordt alleen ondersteund op een paar doelen.

Op sommige platforms is de--kom tot rust optie voert globale optimalisaties uit die mogelijk worden wanneer de linker de adressering in het programma oplost, zoals ontspannende adresmodi en het synthetiseren van nieuwe instructies in het uitvoerobjectbestand.

Op sommige platforms kunnen deze koppelingstijd-globale optimalisaties symbolische foutopsporing van het resulterende uitvoerbare bestand onmogelijk maken. Dit is bekend voor de Matsushita MN10200 en MN10300 processorfamilie.

Op platforms waar dit niet wordt ondersteund,--kom tot rust wordt geaccepteerd, maar genegeerd.

--retain-symbolen-file bestandsnaam

Behouden enkel en alleen de symbolen die in het bestand worden vermeld bestandsnaam , alle andere weggooien. bestandsnaam is gewoon een plat bestand, met één symboolnaam per regel. Deze optie is vooral handig in omgevingen (zoals VxWorks) waar een grote globale symbooltabel geleidelijk wordt geaccumuleerd om runtime-geheugen te sparen.

--retain-symbolen-file doet niet negeer ongedefinieerde symbolen of symbolen die nodig zijn voor verplaatsingen.

Je mag alleen opgeven--retain-symbolen-file eenmaal in de opdrachtregel. Het overschrijft-s en-S.

-rpath dir

Voeg een map toe aan het zoekpad van de runtime-bibliotheek. Dit wordt gebruikt bij het koppelen van een ELFexecutable met gedeelde objecten. Allemaal-rpath argumenten worden samengevoegd en doorgegeven aan de runtime-linker, waarmee ze tijdens runtime gedeelde objecten zoeken. De-rpath optie wordt ook gebruikt bij het zoeken naar gedeelde objecten die nodig zijn voor gedeelde objecten die expliciet zijn opgenomen in de link; zie de beschrijving van de-rpath-koppeling keuze. Als-rpath wordt niet gebruikt bij het koppelen van een ELF-uitvoerbaar bestand, de inhoud van de omgevingsvariabele "LD_RUN_PATH" wordt gebruikt als deze is gedefinieerd.

De-rpath optie kan ook worden gebruikt op SunOS. Standaard, op SunOS, vormt de linker een runtime zoekveld van alle-L opties die het wordt gegeven. Als een-rpath optie wordt gebruikt, zal het runtime-zoekpad uitsluitend worden gevormd met behulp van de-rpath opties, negeert de-Lopties. Dit kan handig zijn bij het gebruik van gcc, dat veel toevoegt-L opties die mogelijk op NFS gemounte bestandssystemen zijn.

Voor compatibiliteit met andere ELF-linkers, als de-R optie wordt gevolgd door een mapnaam, in plaats van een bestandsnaam, wordt het behandeld als de-rpath keuze.

-rpath-koppeling DIR

Bij gebruik van ELF of SunOS kan één gedeelde bibliotheek een andere bibliotheek vereisen. Dit gebeurt wanneer een "ld -shared" -link een gedeelde bibliotheek als een van de invoerbestanden bevat.

Wanneer de linker een dergelijke afhankelijkheid tegenkomt bij het doen van een niet-gedeelde, niet-verplaatsbare koppeling, zal deze automatisch proberen de vereiste gedeelde bibliotheek te vinden en deze in de koppeling op te nemen, als deze niet expliciet is opgenomen. In een dergelijk geval is de-rpath-koppeling optie specificeert de eerste reeks te doorzoeken mappen. De-rpath-koppeling optie kan een reeks directorynamen specificeren door een lijst met namen op te geven, gescheiden door dubbele punten, of door meerdere keren te verschijnen.

Deze optie moet met de nodige voorzichtigheid worden gebruikt omdat deze het zoekpad overschrijft dat mogelijk in een gedeelde bibliotheek is gecompileerd. In een dergelijk geval is het mogelijk om per ongeluk een ander zoekpad te gebruiken dan de runtime-linker zou doen.

De linker gebruikt de volgende zoekpaden om de vereiste gedeelde bibliotheken te vinden.

1.

Alle mappen gespecificeerd door-rpath-koppeling opties.

2.

Alle mappen gespecificeerd door-rpath opties. Het verschil tussen-rpath en-rpath-koppeling is dat mappen gespecificeerd door-rpath opties zijn opgenomen in het uitvoerbare bestand en worden gebruikt tijdens runtime, terwijl het-rpath-koppeling optie is alleen effectief op moment van koppelen. Het is alleen voor de native linker.

3.

Op een ELF-systeem, als de-rpath en "rpath-link" -opties werden niet gebruikt, zoek in de inhoud van de omgevingsvariabele "LD_RUN_PATH". Het is alleen voor de native linker.

4.

Op SunOS, als het-rpath optie is niet gebruikt, zoek naar mappen die zijn opgegeven met-L opties.

5.

Voor een native linker, de inhoud van de omgevingsvariabele "LD_LIBRARY_PATH".

6.

Voor een native ELF-linker worden de mappen in "DT_RUNPATH" of "DT_RPATH" van een gedeelde bibliotheek doorzocht op gedeelde bibliotheken die deze nodig hebben.De "DT_RPATH" -items worden genegeerd als er "DT_RUNPATH" -vermeldingen bestaan.

7.

De standaardmappen, normaal / lib en / Usr / lib .

8.

Voor een native linker op een ELF-systeem, als het bestand /etc/ld.so.conf bestaat, de lijst met mappen gevonden in dat bestand.

Als de vereiste gedeelde bibliotheek niet wordt gevonden, geeft de linker een waarschuwing en gaat verder met de koppeling.

-gedeelde

-Bshareable

Maak een gedeelde bibliotheek. Dit wordt momenteel alleen ondersteund op ELF-, XCOFF- en SunOS-platforms. Op SunOS zal de linker automatisch een gedeelde bibliotheek maken als de-e optie wordt niet gebruikt en er zijn ongedefinieerde symbolen in de link.

--sort-common

Deze optie verteltld om de algemene symbolen op grootte te sorteren wanneer deze ze in de juiste uitvoergedeelten plaatst. Eerst komen alle bytesymbolen, dan alle twee bytes, dan alle vier bytes, en dan al het andere. Dit is om openingen tussen symbolen te voorkomen vanwege uitlijningsbeperkingen.

--split-by-file grootte

Gelijkwaardig aan--split per Reloc maar maakt een nieuw uitvoergedeelte voor elk invoerbestand wanneer grootte is bereikt. grootte standaard een grootte van 1 indien niet opgegeven.

--split-by-reloc tellen

Probeert extra secties in het uitvoerbestand aan te maken zodat geen enkele uitvoersectie in het bestand meer bevat dan tellen verhuizingen. Dit is handig bij het genereren van enorme verplaatsbare bestanden om te downloaden naar bepaalde real-time kernels met het COFF-objectbestandsformaat; omdat COFF niet meer dan 65535 verplaatsingen in een enkele sectie vertegenwoordigt. Merk op dat dit niet zal werken met object bestandsformaten die geen arbitraire secties ondersteunen. De linker splitst individuele invoersecties niet op voor herdistributie, dus als een enkele invoersectie meer dan bevat tellen verplaatsingen één uitvoersectie zal die veel verplaatsingen bevatten. tellen standaard ingesteld op een waarde van 32768.

--stats

Bereken en toon statistieken over de werking van de linker, zoals uitvoeringstijd en geheugengebruik.

--traditional-formaat

Voor sommige doelen is de uitvoer vanld is in sommige opzichten anders dan de uitvoer van een bestaande linker. Deze schakeloptield om in plaats daarvan het traditionele formaat te gebruiken.

Op SunOS bijvoorbeeldld combineert dubbele invoer in de tekenreeks van de symboolreeks. Dit kan de grootte van een uitvoerbestand met volledige foutopsporingsinformatie met meer dan 30 procent verminderen. Helaas kan het SunOS "dbx" -programma het resulterende programma niet lezen ("gdb" heeft geen problemen). De--traditional-formaat schakelaar verteltld om dubbele items niet te combineren.

--section-start sectie naam = org

Zoek een sectie in het uitvoerbestand op het absolute adres gegeven door org . U kunt deze optie zo vaak gebruiken als nodig is om meerdere secties op de opdrachtregel te vinden. org moet een enkel hexadecimaal geheel getal zijn; voor compatibiliteit met andere linkers mag u de leidende tekst weglaten0x meestal geassocieerd met hexadecimale waarden. Notitie: er zou geen witte ruimte tussen moeten zijn sectie naam , het gelijkteken (``=''), en org .

-Tbss org

-Tdata org

-Ttext org

Gebruik org als startadres voor --- respectievelijk --- het segment "bss", "data" of de "tekst" van het uitvoerbestand. org moet een enkel hexadecimaal geheel getal zijn; voor compatibiliteit met andere linkers mag u de leidende tekst weglaten0x meestal geassocieerd met hexadecimale waarden.

--dll-verbose

--verbose

Toon het versienummer voorld en een lijst met de ondersteunde emulaties die worden ondersteund. Weergeven welke invoerbestanden wel en niet kunnen worden geopend. Geef het linkerscript weer dat wordt gebruikt door de linker.

--version-script = version-scriptfile

Specificeer de naam van een versiescript voor de linker. Dit wordt meestal gebruikt bij het maken van gedeelde bibliotheken om aanvullende informatie op te geven over de versiehiërarchie voor de bibliotheek die wordt gemaakt. Deze optie is alleen zinvol op ELF-platforms die gedeelde bibliotheken ondersteunen.

--warn-common

Waarschuwen wanneer een gemeenschappelijk symbool wordt gecombineerd met een ander gemeenschappelijk symbool of met een symbooldefinitie. Unix-linkers staan ​​deze enigszins slordige praktijk toe, maar linkers op sommige andere besturingssystemen niet. Met deze optie kunt u potentiële problemen vinden door het combineren van globale symbolen. Helaas gebruiken sommige C-bibliotheken deze praktijk, dus je kunt een aantal waarschuwingen krijgen over symbolen in de bibliotheken en in je programma's.

Er zijn drie soorten globale symbolen, hier geïllustreerd door C-voorbeelden:

int i = 1;

Een definitie, die in de geïnitialiseerde gegevenssectie van het uitvoerbestand staat.

extern int i;

Een ongedefinieerde verwijzing, die geen ruimte toewijst. Er moet ergens een definitie of een algemeen symbool voor de variabele zijn.

int i;

Een gebruikelijk symbool. Als er slechts (één of meer) algemene symbolen voor een variabele zijn, wordt deze in het niet-geïnitialiseerde gegevensgebied van het uitvoerbestand geplaatst. De linker voegt meerdere algemene symbolen voor dezelfde variabele samen in één symbool. Als ze van verschillende grootte zijn, kiest het de grootste maat. De linker verandert een gemeenschappelijk symbool in een declaratie, als er een definitie is van dezelfde variabele.

De--warn-common optie kan vijf soorten waarschuwingen produceren. Elke waarschuwing bestaat uit een paar regels: de eerste beschrijft het zojuist aangetroffen symbool en de tweede beschrijft het vorige symbool dat met dezelfde naam werd gevonden. Een of beide van de twee symbolen zullen een algemeen symbool zijn.

1.

Een gemeenschappelijk symbool in een verwijzing veranderen, omdat er al een definitie voor het symbool bestaat.

(

): warning: common of `'per definitie overschreven (
): waarschuwing: hier gedefinieerd

2.

Een gemeenschappelijk symbool in een referentie veranderen, omdat er een latere definitie voor het symbool wordt aangetroffen. Dit is hetzelfde als het vorige geval, behalve dat de symbolen in een andere volgorde worden aangetroffen.

(

): waarschuwing: definitie van `'algemeen gangbaar (
): waarschuwing: gebruikelijk is hier

3.

Een gemeenschappelijk symbool samenvoegen met een vorig gemeenschappelijk symbool van dezelfde grootte.

(

): warning: multiple common van `' (
): waarschuwing: eerder gebruikelijk is hier

4.

Een gemeenschappelijk symbool samenvoegen met een eerder groter algemeen symbool.

(

): warning: common of `'overschreven door groter gemeenschappelijk (
): waarschuwing: groter gemeenschappelijk is hier

5.

Een gemeenschappelijk symbool samenvoegen met een eerder kleiner gemeenschappelijk symbool. Dit is hetzelfde als het vorige geval, behalve dat de symbolen in een andere volgorde worden aangetroffen.

(

): warning: common of `'overheersende kleinere gemeenschappelijke (
): waarschuwing: kleiner gemeenschappelijk is hier

--warn-bouwers

Waarschuwen als er wereldwijde constructeurs worden gebruikt. Dit is alleen nuttig voor een paar bestandsindelingen van objecten. Voor formaten zoals COFF of ELF kan de linker het gebruik van globale constructors niet detecteren.

--warn-multiple-gp

Waarschuwen als er meerdere globale aanwijzerwaarden zijn vereist in het uitvoerbestand. Dit is alleen zinvol voor bepaalde processors, zoals de Alpha. Specifiek, zetten sommige verwerkers grootwaardige constanten in een speciale sectie. Een speciaal register (de globale aanwijzer) wijst in het midden van deze sectie, zodat constanten efficiënt kunnen worden geladen via een relatief basale adresregelmodus. Omdat de verschuiving in de basisregister-relatieve modus vast en relatief klein is (bijvoorbeeld 16 bits), beperkt dit de maximale grootte van de constante pool. In grote programma's is het daarom vaak nodig om meerdere globale pointerwaarden te gebruiken om alle mogelijke constanten te kunnen aanspreken. Deze optie zorgt ervoor dat een waarschuwing wordt afgegeven wanneer dit geval zich voordoet.

--warn-once

Waarschuw slechts één keer voor elk ongedefinieerd symbool, in plaats van één keer per module die ernaar verwijst.

--warn doorsnede uitlijnen

Waarschuwen als het adres van een uitvoergedeelte is gewijzigd vanwege uitlijning. Meestal wordt de uitlijning ingesteld door een invoersectie. Het adres wordt alleen gewijzigd als dit niet expliciet is opgegeven; dat wil zeggen, als de opdracht "SECTIONS" geen startadres voor de sectie opgeeft.

--whole-archief

Voor elk archief vermeld op de opdrachtregel na de--whole-archief optie, neem elk objectbestand op in het archief in de koppeling, in plaats van het archief te zoeken naar de vereiste objectbestanden. Dit wordt normaal gesproken gebruikt om een ​​archiefbestand in een gedeelde bibliotheek te veranderen, waardoor elk object gedwongen wordt om in de resulterende gedeelde bibliotheek te worden opgenomen. Deze optie kan meerdere keren worden gebruikt.

Twee opmerkingen bij gebruik van deze optie van gcc: Ten eerste, gcc weet niets over deze optie, dus je moet gebruiken-Wl, -Geheel-archief. Ten tweede, vergeet niet te gebruiken-Wl, -no-whole-archiefna uw lijst met archieven, omdat gcc zijn eigen lijst met archieven aan uw link toevoegt en u misschien niet wilt dat deze vlag die ook beïnvloedt.

--wikkelen symbool

Gebruik een wrapper-functie voor symbool . Elke niet-gedefinieerde verwijzing naar symbool zal worden omgezet naar "__ wrap_symbol". Elke niet-gedefinieerde verwijzing naar "__real_symbol" zal worden omgezet naar symbool .

Dit kan worden gebruikt om een ​​wrapper voor een systeemfunctie te bieden. De wrapper-functie moet "__wrap_symbol" worden genoemd. Als het de systeemfunctie wil aanroepen, moet het "__ real_symbol" bellen.

Hier is een triviaal voorbeeld:

void * __wrap_malloc (int c) {printf ("malloc called with% ld n", c); return __real_malloc (c); }

Als u een andere code met dit bestand linkt via- wrap malloc, dan zullen alle oproepen naar "malloc" in plaats daarvan de functie "__wrap_malloc" aanroepen. De aanroep van "__real_malloc" in "__wrap_malloc" zal de echte "malloc" -functie oproepen.

Misschien wilt u ook een "__real_malloc" -functie opgeven, zodat links zonder de--wikkelen optie zal slagen. Als u dit doet, moet u de definitie van "__ real_malloc" niet in hetzelfde bestand plaatsen als "__wrap_malloc"; als je dat doet, kan de assembler de call oplossen voordat de linker de kans krijgt om hem naar 'malloc' te wikkelen.

--enable-new-dtags

--disable-new-dtags

Deze linker kan de nieuwe dynamische tags in ELF maken. Maar de oudere ELF-systemen begrijpen ze misschien niet. Als u opgeeft--enable-new-dtags, de dynamische tags worden naar behoefte gemaakt. Als u opgeeft--disable-new-dtags, er worden geen nieuwe dynamische tags gemaakt. Standaard worden de nieuwe dynamische tags niet gemaakt. Merk op dat die opties alleen beschikbaar zijn voorELF-systemen.

De i386 PE linker ondersteunt de-gedeelde optie, waardoor de uitvoer een dynamisch gekoppelde bibliotheek (DLL) is in plaats van een normaal uitvoerbaar bestand. U moet de uitvoer "* .dll" een naam geven als u deze optie gebruikt. Bovendien ondersteunt de linker volledig de standaard "* .def" -bestanden, die als een objectbestand op de linkeropdrachtregel kunnen worden gespecificeerd (in feite zou het moeten voorafgaan aan archieven waar het symbolen naartoe exporteert, om ervoor te zorgen dat ze worden gekoppeld, net als een normaal objectbestand).

Naast de opties die voor alle doelen gelden, ondersteunt de i386 PE-linker extra opdrachtregelopties die specifiek zijn voor het i386 PE-doelwit. Opties die waarden aannemen, kunnen van hun waarden worden gescheiden door een spatie of een gelijkteken.

--add-STDCALL-alias

Indien gegeven, symbolen met een stdcall suffix (@ nn ) wordt als zodanig geëxporteerd en ook met het achtervoegsel gestript.

--base-file het dossier

Gebruik het dossier als de naam van een bestand waarin de basisadressen worden opgeslagen van alle verhuizingen die nodig zijn voor het genereren van DLL's dlltool .

--dll

Maak een DLL in plaats van een regulier uitvoerbaar bestand. Je mag ook gebruiken-gedeelde