Quelle est l’utilisation de .exp et quelle est la différence entre .lib et .dll

Pendant la compilation et la liaison, quelle est l’utilisation de .exp? Quelle est la difference entre .lib et .dll? Je sais que .lib sera utilisé, tandis que les liens et .dll seront utilisés lors de l’exécution du programme. Mais quelle est la différence entre .lib et .dll?

Le fichier .lib ne contient-il pas le code pour les fonctions provenant des fichiers .dll? Quelle est la nécessité d’utiliser deux fichiers distincts?

Précisez s’il vous plaît. Merci d’avance

Dans le cas d’une bibliothèque d’importation pour une DLL, le fichier .lib ne contient aucun code réel. Il contient simplement une liste des fonctions dans la DLL associée – suffisamment pour que l’éditeur de liens incorpore une référence à cette DLL dans quelque chose lié à la bibliothèque, mais pas grand-chose d’autre.

Un fichier .exp est un fichier d’exportation – pratiquement identique à un fichier .lib. Il est utilisé (au moins principalement) lorsque vous avez une dépendance circulaire. Par exemple, supposons que vous ayez une DLL qui sert de plug-in pour un exécutable. L’exécutable fournit des fonctions exscopes à utiliser par les DLL de plug-in, mais doit également être capable d’appeler certaines fonctions dans les plug-ins (par exemple, pour charger et initialiser un plug-in).

La DLL ne sera pas liée tant que l’exécutable n’est pas conçu pour fournir un fichier .lib – mais l’exécutable ne sera pas lié tant que la DLL n’est pas conçue pour fournir un fichier .lib. Pour rompre la dépendance, vous exécutez l’éditeur de liens sur l’exécutable, qui échoue (car il ne trouve pas de fichier .lib pour la DLL), mais produira un fichier .exp. Vous liez ensuite la DLL avec le fichier .exp pour l’exécutable. Vous pouvez alors réexécuter le lien pour produire l’exécutable, en utilisant le fichier .lib pour la DLL.