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?
- 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
- BEen bibliotheek mag per regel maar één keer, helemaal aan het eind van het commando, worden geschreven
- 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.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten