Wat zijn Linkers en hoe werken ze?
Linkers zijn een soort software die objectbestanden en bibliotheken met elkaar verbindt om een uitvoerbaar bestand te maken. Ze worden gebruikt bij de ontwikkeling van besturingssystemen, applicaties en andere software. Linkers nemen de objectbestanden die door compilers en bibliotheken zijn gegenereerd als invoer, en genereren een uitvoerbaar bestand als uitvoer.
Linkers voeren verschillende functies uit, waaronder:
1. Symbolische verwijzingen oplossen: Wanneer een programma in een taal op hoog niveau is geschreven, kan het symbolische verwijzingen bevatten naar functies of variabelen die niet in de huidige broncode zijn gedefinieerd. De linker lost deze verwijzingen op door de definities van de functies of variabelen in andere objectbestanden of bibliotheken te vinden.
2. Code en gegevens verplaatsen: Wanneer objectbestanden door de compiler worden gegenereerd, kunnen deze code en gegevens bevatten die relatief zijn aan de locatie van het objectbestand. De linker verplaatst deze code en gegevens naar de juiste locatie in het uitvoerbare bestand.
3. Verwijderen van onnodige code en gegevens: De linker kan code en gegevens verwijderen die niet nodig zijn in het uiteindelijke uitvoerbare bestand, waardoor de omvang ervan wordt verkleind en de prestaties worden verbeterd. Een uitvoerbaar bestand maken: De linker neemt de objectbestanden en bibliotheken als invoer en genereert een uitvoerbaar bestand dat op de doelmachine kan worden uitgevoerd.
Er zijn verschillende soorten linkers beschikbaar, waaronder:
1. Dynamische linkers: Deze linkers creëren een uitvoerbaar bestand dat een verwijzing bevat naar de bibliotheken en andere objectbestanden waarvan het afhankelijk is. Wanneer het programma wordt uitgevoerd, laadt de dynamische linker deze afhankelijkheden en lost eventuele symbolische verwijzingen tijdens runtime op. Statische linkers: Deze linkers creëren een uitvoerbaar bestand dat alle daarin ingebedde afhankelijkheden bevat. Dit betekent dat het programma kan worden uitgevoerd zonder extra afhankelijkheden, maar het betekent ook dat de grootte van het uitvoerbare bestand groter zal zijn.
3. Gedeelde linkers: Deze linkers creëren een uitvoerbaar bestand dat gedeelde bibliotheken bevat, dit zijn verzamelingen code en gegevens die door meerdere programma's kunnen worden gebruikt. Wanneer een programma wordt gekoppeld aan een gedeelde bibliotheek, worden alleen de specifieke functies en variabelen die nodig zijn opgenomen in het uiteindelijke uitvoerbare bestand. Samenvattend zijn linkers een essentieel onderdeel van het softwareontwikkelingsproces, omdat ze de objectbestanden overnemen die door compilers zijn gegenereerd en bibliotheken en maak een uitvoerbaar bestand dat op de doelmachine kan worden uitgevoerd. Ze voeren verschillende functies uit, waaronder het oplossen van symbolische verwijzingen, het verplaatsen van code en gegevens, het verwijderen van onnodige code en gegevens en het maken van een uitvoerbaar bestand. Er zijn verschillende soorten linkers beschikbaar, waaronder dynamische, statische en gedeelde linkers.