Linker, loader en uitvoerbare formaten

Bij het linken van een C-programma verschijnt de fout „undefined reference to `foo'”. Wat is de meest waarschijnlijke oorzaak?

  1. AEr zit een syntaxisfout in foo
  2. Bfoo is in twee bestanden gedefinieerd
  3. Cfoo wordt aangeroepen, maar het bestand of de bibliotheek met de definitie van foo is niet bij het linken betrokken
Antwoord en toelichting tonen

Antwoord: C. foo wordt aangeroepen, maar het bestand of de bibliotheek met de definitie van foo is niet bij het linken betrokken

Als een functie in een headerbestand is gedeclareerd, slaagt het compileren. Maar als bij het linken het objectbestand of de bibliotheek met de definitie van foo niet wordt gevonden, kan het adres voor de aanroepinstructie niet worden bepaald en volgt deze fout. Veelvoorkomende oorzaken zijn dat is vergeten het bestand met de definitie te linken, dat is vergeten de bibliotheek op te geven (zoals -lm), of dat door een verschil in spelling of argumenten een andere naam is ontstaan.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. In zowel a.c als b.c is een globale functie void init(void) met dezelfde naam gedefinieerd zonder static, en de bestanden worden gelinkt. Wat gebeurt er?
  2. Wat is het juiste effect als in C een functie met static wordt gedefinieerd (bijvoorbeeld static int helper(void))?
  3. Wat is de juiste betekenis van „extern int count;” in C?
  4. Welke uitspraak over het ELF-formaat, dat veel op Linux wordt gebruikt, is juist?
  5. Wat staat er in de .text-sectie van een uitvoerbaar bestand?

Vergelijkingen bij dit onderwerp