pourquoi ai-je besoin de glut.h, glut32.lib, glut32.dll ALL pour comstackr un programme openGL?

Autant que je sache, le fichier .lib est une sorte de fichier compilé et, bien sûr, le fichier dll contient toutes les fonctions qu’il contient. Pourquoi ne puis-je pas simplement utiliser le fichier .lib ou le fichier .dll? Pourquoi les instructions me disent-elles de les obtenir toutes les trois?

À propos, les fichiers OpenGL ne sont-ils pas libres de toute façon parce que nous avons un “freeGLut” ??

    Autant que je sache, le fichier .lib est une sorte de fichier compilé et, bien sûr, le fichier dll contient toutes les fonctions qu’il contient.

    Non, ce n’est pas si simple.

    Une DLL est un binary exécutable, moins un point d’entrée de démarrage. La DLL exporte certains symboles, mais ceux-ci sont sans fonctionnalité, uniquement des positions dans l’espace d’adressage. Un compilateur ne peut pas déduire d’une signature standard (ou SO) de la signature de chaque symbole. Pour cela, il faut que les signatures soient communiquées via une source supplémentaire. C’est le fichier d’en-tête (.h).

    Cependant, pour être réellement utile, la DLL doit être chargée dans le processus lors de son exécution. Pour cela, le fichier exécutable doit être complété par des informations supplémentaires, notamment les DLL à charger. Sous Windows, cette opération est effectuée à l’aide d’une bibliothèque de raccord (.lib), qui porte simplement les informations d’importation DLL. Sur d’autres systèmes d’exploitation, vous liez la “DLL” en pointant l’éditeur de liens sur celui-ci.

    Pourquoi ne puis-je pas simplement utiliser le fichier .lib ou le fichier .dll?

    Parce que le .lib ne contient pas le code réel mais seulement les informations, pour utiliser une certaine DLL. Et parce que les outils Microsoft ne peuvent pas extraire leurs informations de liaison dynamic des DLL cibles.

    Pourquoi les instructions me disent-elles de les obtenir toutes les trois?

    Parce que chaque fichier a une fonction spécifique, et que vous avez besoin des trois

    • obtenir les signatures de fonction (.h)
    • demandez à votre exécutable de charger une certaine DLL (.lib)
    • et obtenez la bibliothèque réelle sous la forme d’un fichier .dll

    Par ailleurs, les fichiers OpenGL ne sont-ils pas libres de toute façon parce que nous avons un “freeGLut”?

    GLUT ne fait pas partie d’OpenGL. C’est une bibliothèque développée indépendamment. De plus, OpenGL n’est qu’une spécification et il n’existe pas de “sources” OpenGL; il n’y a que des implémentations particulières, dont certaines sont gratuites.

    • glut32.h est le fichier d’en-tête utilisé lors de la compilation
    • glut32.lib est le fichier de bibliothèque utilisé par l’éditeur de liens pour résoudre les références aux fonctions et / ou aux objects fournis par la bibliothèque glut32 . Lorsqu’il est utilisé avec une DLL, le fichier .lib est souvent appelé une “bibliothèque d’importation”. Au lieu du code, il contient des informations utilisées par l’éditeur de liens pour que l’exécutable fasse référence de manière implicite aux fonctions de la DLL. Le chargeur d’exécution charge donc également la DLL. lorsque l’exécutable est chargé au moment de l’exécution. Certaines chaînes d’outils fournissent un outil (généralement appelé implib ) pouvant générer une bibliothèque d’importation utilisant une DLL en entrée.
    • glut32.dll est la bibliothèque dynamic utilisée au moment de l’exécution pour fournir les fonctions et les objects au moment de l’exécution.

    Certains outils (par exemple, la chaîne d’outils GCC) peuvent utiliser la DLL directement à la place du fichier .lib, fournissant ainsi sa propre fonctionnalité implib . Je ne sais pas pourquoi Microsoft n’a pas pris en charge cela dans leurs outils.

    GLUT est un composant optionnel. Vous n’en avez pas besoin si votre programme ne l’utilise pas. Mais si vous l’utilisez, vous avez besoin de glut.h car votre programme #include le fait, et vous avez besoin de glut32.lib car c’est la bibliothèque d’importation que l’éditeur de liens utilise pour établir la relation de votre exécutable avec la DLL. Vous n’avez pas besoin de glut32.dll lorsque vous comstackz ou liez votre programme (car la bibliothèque d’importation remplit cette fonction), mais vous en avez besoin lorsque vous exécutez votre programme car il contient les fonctions GLUT réelles appelées par votre programme.

    Freeglut est un clone open-source de GLUT d’origine, car ce dernier est obsolète et sa licence ne permet à personne de faire des modifications pour l’améliorer.