Wat is een objectbestand?
Een objectbestand is een computerbestand dat wordt gegenereerd door een programma dat een compiler wordt genoemd en dat zowel gegevens als instructies bevat. Compilers vertalen de broncode van de programmeertaal in een tussenliggende machineleesbare vorm die bekend staat als objectcode. Kleinere programma's kunnen worden gecompileerd in een enkel objectbestand, terwijl grotere programma's meestal worden gecompileerd in verschillende bestanden met een gerelateerde functie. Deze individuele objectbestanden worden samengevoegd door een linker en besturingssysteemspecifieke informatie wordt toegevoegd om een uitvoerbaar programma te vormen.
In de praktijk wordt een objectbestand aangeduid met de extensie ".obj". Er zijn echter verschillende indelingen voor deze bestanden. De meest voorkomende zijn het Intel® Relocatable Object Module Format (OMF) en het Common Object File Format (COFF) van Windows® en UNIX® Systeem V. In veel INIX®-systemen is het uitvoerbare en koppelbare formaat (ELF) COFF vervangen.
Ongeacht de indeling bevat een objectbestand doorgaans drie typen informatie waarmee het kan communiceren met andere programmamodules. Procedures en gegevens die openstaan voor externe referentie, krijgen namen toegewezen waarmee ze vanuit andere modules kunnen worden aangeroepen. Evenzo worden verwijzingen naar informatie buiten de module genoteerd, maar krijgen deze geen naam. Wanneer de bestanden zijn gekoppeld, krijgen de naamloze referenties de naam toegewezen in de module waar ze oorspronkelijk werden gedefinieerd. Lokale namen worden alleen gebruikt voor instructies en gegevens waarnaar alleen in een module wordt verwezen.
Niet alle koppelbare code wordt opgeslagen als objectbestanden. Bibliotheken zijn verzamelingen van vooraf gecompileerde routines die worden opgeslagen als objectcode. Ze worden op vrijwel dezelfde manier geproduceerd als objectbestanden en zijn handig voor het opslaan van veelgebruikte procedures. Wanneer een linker geen verwijzing vindt in andere objectbestanden, zal deze er automatisch naar zoeken in een bibliotheekbestand. De meeste implementaties van een programmeertaal worden geleverd met een standaardbibliotheek van functies.
Door middel van dynamische koppeling kan een objectbestand gelijktijdig worden gebruikt door meerdere uitvoerende programma's. In plaats van objectcode aan een programma te binden wanneer het is gekoppeld, wordt het opgehaald wanneer het programma wordt geladen of tijdens runtime wanneer naar een procedure wordt verwezen. In de Windows®-omgeving worden deze dynamische linkbibliotheken genoemd en worden ze aangeduid met de extensie ".dll". Systemen die vergelijkbaar zijn met Unix® noemen dit type bestand vaak een dynamisch gedeeld object (DSO). Dit type objectbestand kan ook worden geïmplementeerd voor gebruik met een bepaald programma en zou deel uitmaken van de installatie van dat programma.