Comment fonctionne .h, .lib et .dll

Pour utiliser la fonction de bibliothèque FreeGlut, je devais faire ce qui suit,

  • Freeglut.h ajouté en tant que fichier d’en-tête
  • Ajout de freeGlut.lib en tant que fichier de ressources
  • FreeGlut.dll copié dans mon dossier Windows / SysWOW64

Mais, comment tout ce système (.h, .lib & .dll) est-il interrelié?

Je sais que l’essentiel est d’append un fichier d’en-tête avec une déclaration de classe et d’écrire le corps dans son fichier source respectif. Enfin, incluez le fichier d’en-tête dans votre application principale.

Vous devez inclure les fichiers d’en-tête afin que le compilateur comprenne les déclarations de divers types et fonctions exposés / utilisés par la bibliothèque.

Les fichiers de bibliothèque (lib ou dll) contiennent le code d’object auquel le code utilisant la bibliothèque est lié.

pour lib, le lien est statique et se produit au moment de la compilation. L’utilisation d’une bibliothèque statique (lib) augmente la taille de votre exécutable, car l’intégralité de la bibliothèque est liée à votre programme.

pour les dll, la liaison est dynamic et les appels sont évalués au moment de l’exécution. Lorsque vous utilisez des dll, la taille de votre fichier exécutable n’augmente pas car les dll sont liées au moment de l’exécution et vous devez généralement les placer dans des chemins prédéfinis pour pouvoir les lier au moment de l’exécution.

L’avantage de la bibliothèque statique sur la DLL est que votre exécutable qui utilise la bibliothèque est autonome alors que dans le cas d’une DLL, la DLL doit être présente sur un chemin prédéfini tout en exécutant l’exécutable qui l’utilise.

Le fichier d’en-tête déclare tout pour que le compilateur sache que vous allez le fournir.

Le fichier .lib est utilisé pour indiquer à l’éditeur de liens où trouver les implémentations. Normalement, elles sont simplement empaquetées dans le fichier .lib, mais dans ce cas, vous avez une bibliothèque d’importation. à l’exécution”.

Le fichier .dll est l’implémentation et est chargé au moment de l’exécution. Normalement, vous ne devriez pas copier ceci dans votre dossier Système, mais les laisser dans le dossier contenant votre fichier .exe.

Le fichier .h est nécessaire à l’étape de compilation: il déclare l’ensemble des fonctions, structures et signatures disponibles dans FreeGLUT afin que le compilateur puisse les coder.

Le fichier .lib est nécessaire pour l’étape du lien: à ce stade, vous aurez un ensemble de fichiers objects qui référencent les fonctions FreeGLUT, mais aucune définition / implémentation réelle de ces derniers. Dans ce cas, il les définira comme des importations DLL à partir du fichier FreeGLUT.DLL qui seront résolues au moment du chargement.

Le fichier .dll est l’endroit où le code réside réellement et est nécessaire pour l’exécution. Il doit être placé quelque part dans votre chemin ou dans le répertoire à partir duquel vous exécutez votre code pour que Windows puisse le trouver. Notez que SysWOW64 est presque certainement le mauvais endroit pour cela; vous devez soit configurer Visual Studio pour le copier dans votre répertoire bin \ debug, soit le placer ailleurs et append ce répertoire à votre environnement PATH (puis redémarrez Visual Studio pour le récupérer).