Linker, loader en uitvoerbare formaten

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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Welke omschrijving van position-independent code (PIC) is juist?
  2. Wat is de juiste rol van de GOT (global offset table) die bij gedeelde bibliotheken wordt gebruikt?
  3. Welke omschrijving is juist van lazy binding met de PLT (procedure linkage table) bij dynamisch linken?
  4. Wat is de juiste rol van de dynamische linker (zoals ld.so) die werkt bij het starten van een dynamisch gelinkt programma op Linux?
  5. Wat is het juiste doel van ASLR (address space layout randomization)?

Vergelijkingen bij dit onderwerp