Wat is het nut van .exp en wat is het verschil tussen .lib en .dll?

Wat is het gebruik van .exp tijdens het compileren en koppelen? Wat is het verschil tussen .lib en .dll? Ik weet dat .lib zal worden gebruikt, terwijl linken en .dll zullen worden gebruikt bij het uitvoeren van het programma. Maar wat is precies het verschil tussen .lib en .dll?

Bevat het .lib-bestand niet de code voor de functies die uit de .dll-bestanden komen?
Wat is de noodzaak om twee aparte bestanden te gebruiken?

Verduidelijk.


Antwoord 1, autoriteit 100%

In het geval van een importbibliotheek voor een DLL, bevat het .lib-bestand geenenige daadwerkelijke code. Het bevat in feite slechts een lijst van de functies in de bijbehorende DLL — genoeg voor de linker om een ​​verwijzing naar die DLL in te sluiten in iets dat aan de bibliotheek is gekoppeld, maar niet veel anders.

Een .exp-bestand is een exportbestand — in principe ongeveer hetzelfde als een .lib-bestand. Het wordt gebruikt (althans voornamelijk) wanneer u een circulaire afhankelijkheid hebt. Stel bijvoorbeeld dat u een DLL hebt die fungeert als plug-in voor een uitvoerbaar bestand. Het uitvoerbare bestand levert enkele geëxporteerde functies voor gebruik door plug-in-DLL’s, maar moet ook enkele functies in de plug-ins kunnen aanroepen (bijvoorbeeld om een ​​plug-in te laden en te initialiseren).

De DLL zal niet linken totdat het uitvoerbare bestand is gebouwd om een ​​.lib-bestand te bieden — maar het uitvoerbare bestand zal niet koppelen totdat de DLL is gebouwd om een ​​.lib-bestand te bieden. Om de afhankelijkheid te verbreken, voert u de linker uit tegen het uitvoerbare bestand, wat mislukt (omdat het geen .lib-bestand voor de DLL kan vinden), maar zaleen .exp-bestand produceren. Vervolgens koppel je de DLL aan het .exp-bestand voor het uitvoerbare bestand. U kunt dan de link opnieuw uitvoeren om het uitvoerbare bestand te produceren, met behulp van het .lib-bestand voor de DLL.

Other episodes