Wat is Objectbestand?

Bestand dat de compiler uit één bronbestand genereert. Bevat machinecode, beginwaarden van gegevens, de symbooltabel en herlocatie-informatie, maar de adressen van andere bestanden zijn nog niet vastgelegd en zonder linken kan het niet worden uitgevoerd.

Japanse benaming: オブジェクトファイル

“Objectbestand” komt voor in 6 oefenvragen uit 2 onderwerpen, bijv. Linker, loader en uitvoerbare formaten, Compilers.

Vakgebied: Linker, loader en uitvoerbare formaten

Nu oefenen: vragen over Objectbestand

Welke uitspraak over het objectbestand (.o) dat de compiler uit één bronbestand voortbrengt, is juist?

  1. AHet is een compleet programma dat rechtstreeks door het OS kan worden uitgevoerd
  2. BHet is alleen de gecomprimeerde broncode en bevat geen machinecode
  3. CHet bevat machinecode, maar de adressen van functies en variabelen in andere bestanden zijn nog niet bepaald
Antwoord en toelichting tonen

Antwoord: C. Het bevat machinecode, maar de adressen van functies en variabelen in andere bestanden zijn nog niet bepaald

Een objectbestand bevat de machinecode die uit de functies van dat bestand is vertaald, de beginwaarden van variabelen, een lijst van gedefinieerde en gerefereerde namen (symbooltabel) en een lijst van plaatsen waar later adressen moeten worden ingevuld (relocatie-informatie). Instructies die een functie in een ander bestand aanroepen, zoals printf, hebben een voorlopige waarde omdat het adres onbekend is. De linker voegt meerdere objectbestanden samen, bepaalt de adressen en maakt een uitvoerbaar bestand.

Bij de GNU-linker kan een fout „undefined reference” optreden als een statische bibliotheek vóór het objectbestand dat haar gebruikt wordt geschreven, zoals in „gcc -lmylib main.o”. Wat is de juiste reden?

  1. ADe linker verwerkt van links naar rechts en haalt functies waarnaar op het moment van het lezen van de bibliotheek nog niet is verwezen niet op
  2. BEen bibliotheek mag per regel maar één keer, helemaal aan het eind van het commando, worden geschreven
  3. CAls de bibliotheek vooraan staat, wordt de inhoud van de bibliotheek gewist
Antwoord en toelichting tonen

Antwoord: A. De linker verwerkt van links naar rechts en haalt functies waarnaar op het moment van het lezen van de bibliotheek nog niet is verwezen niet op

De GNU-linker verwerkt bestanden in de volgorde waarin ze op de opdrachtregel staan en haalt bij een statische bibliotheek alleen de objectbestanden op die „nog niet gevonden definities” van verwijzingen oplossen. Als de bibliotheek eerst wordt geschreven, zijn er op dat moment nog geen verwijzingen van main.o, dus wordt niets opgehaald, en ook als main.o daarna wordt gelezen, wordt niet teruggegaan om te zoeken. Daarom staat de bibliotheek in principe achter het gebruikende bestand.

“Objectbestand” in de toelichting

Vragen met “Objectbestand” (6)

  1. Welke uitspraak over het objectbestand (.o) dat de compiler uit één bronbestand voortbrengt, is juist?
  2. Bij de GNU-linker kan een fout „undefined reference” optreden als een statische bibliotheek vóór het objectbestand dat haar gebruikt wordt geschreven, zoals in „gcc -lmylib main.o”. Wat is de juiste reden?
  3. Bij het disassembleren van een objectbestand bleek het sprongdoel van de instructie die de externe functie printf aanroept een voorlopige waarde zoals 0 te zijn. Wanneer wordt deze waarde juist ingevuld?
  4. Welke algemene volgorde waarin uit een C-programma een uitvoerbaar bestand ontstaat is juist?
  5. Wat is de juiste hoofdtaak van de linker?
  6. Bij het linken van een C-programma verschijnt de fout „undefined reference to `foo'”. Wat is de meest waarschijnlijke oorzaak?

Verwante termen

Linker Relocatie (relocation) Symbooltabel Statische bibliotheek Dynamisch linken PLT (procedure linkage table) Dynamische linker GOT (global offset table) Assembler Symboolresolutie

Naar de woordenlijst