Lors de la compilation et de la liaison, à quoi sert .exp? Quelle est la différence entre .lib et .dll? Je sais que .lib sera utilisé, tandis que la liaison et .dll seront utilisés lors de l'exécution du programme. Mais quelle est exactement la différence entre .lib et .dll?
Le fichier .lib ne contient-il pas le code des fonctions provenant des fichiers .dll? Quelle est la nécessité d'utiliser deux fichiers distincts?
Précisez s'il vous plaît.
Dans le cas d'une bibliothèque d'importation pour une DLL, le fichier .lib contient pas tout code réel. Il contient simplement une liste des fonctions dans le DLL - suffisamment pour que l'éditeur de liens incorpore une référence à ce DLL dans quelque chose lié à la bibliothèque) , mais pas grand-chose d'autre.
Un fichier .exp est un fichier d'exportation - à peu près identique à un fichier .lib. Il est utilisé (au moins principalement) lorsque vous avez une dépendance circulaire. Par exemple, supposons que vous disposez d'un DLL qui agit comme un plug-in pour un exécutable. L'exécutable fournit certaines fonctions exportées à utiliser par les DLL de plug-in, mais doit également pouvoir appeler certaines fonctions dans les plug-ins (par exemple pour charger et initialiser un plug-in).
Le DLL ne sera pas lié jusqu'à ce que l'exécutable soit construit pour fournir un fichier .lib - mais l'exécutable ne sera pas lié tant que le DLL ne sera pas construit pour fournir un fichier .lib. Pour briser 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 will produira un .exp Vous pouvez ensuite lier le DLL au fichier .exp de l'exécutable. Vous pouvez ensuite réexécuter le lien pour produire l'exécutable, en utilisant le fichier .lib pour la DLL.