Linker, loader en uitvoerbare formaten

Een dynamisch gelinkt programma werd naar een andere computer gekopieerd en uitgevoerd, maar startte niet. Wat is de meest waarschijnlijke oorzaak?

  1. AHet uitvoerbare bestand bevatte alle bibliotheekcode en was te groot
  2. BDynamisch gelinkte programma's werken per regel alleen op de computer waarop ze zijn gemaakt
  3. CDe benodigde gedeelde bibliotheek is niet aanwezig of er is alleen een incompatibele versie
Antwoord en toelichting tonen

Antwoord: C. De benodigde gedeelde bibliotheek is niet aanwezig of er is alleen een incompatibele versie

Een dynamisch gelinkt programma gebruikt de gedeelde bibliotheken die op de computer waarop het draait aanwezig zijn. Als de benodigde bibliotheek ontbreekt of alleen een oude versie aanwezig is waarin functies ontbreken, kan de dynamische linker niet koppelen en mislukt het starten. Op Linux kan met het commando ldd worden gecontroleerd welke gedeelde bibliotheken een programma nodig heeft en of ze worden gevonden. Soms wordt om de verspreiding te vergemakkelijken bewust statisch gelinkt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Wat bouwt de linker in het uitvoerbare bestand in als er samen met een statische bibliotheek (.a-bestand) wordt gelinkt?
  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. Welke omschrijving van position-independent code (PIC) is juist?
  4. Wat is de juiste rol van de GOT (global offset table) die bij gedeelde bibliotheken wordt gebruikt?
  5. Welke omschrijving is juist van lazy binding met de PLT (procedure linkage table) bij dynamisch linken?

Vergelijkingen bij dit onderwerp