Comment les fichiers .lib et .obj sont-ils liés les uns aux autres? Quel est leur but? Un .lib est-il juste une collection de fichiers .obj? Si c'est le cas, les .obj sont-ils stockés à l'intérieur du fichier .lib rendant inutile le .obj?Quelle est la relation entre .lib et .obj entre eux et mon projet en C++?
Répondre
Généralement, les fichiers .obj
font référence à fichiers objet. C'est un fichier source dans sa forme compilée. Par exemple, un main.cpp
et un foo.cpp
produiraient main.obj
et foo.obj
.
Il est alors le travail des liens pour les lier ensemble, de sorte que main.obj
peut atteindre les fonctions définies dans foo.obj
et vice-versa. L'éditeur de liens affichera votre fichier binaire, qui est le .lib
(ou .a
, ou .exe
, ou .dll``, etc.). Donc dans un sens lâche, oui, la sortie binaire (.lib
dans votre cas) est la collection de fichiers .obj
liés. Une fois que vous avez terminé la compilation et que vous souhaitez utiliser la bibliothèque, vous n'avez besoin que d'autres programmes pour lier avec le .lib
. Les .obj
sont considérés comme des fichiers intermédiaires et ne sont pas nécessaires une fois la liaison terminée.
Cela dépend. Si le fichier .lib est une bibliothèque statique, il s'agit plus ou moins d'une collection de fichiers .obj. Si vous créez ou utilisez une DLL, le fichier .lib est simplement une bibliothèque d'importation, avec des informations sur les symboles disponibles dans la DLL correspondante.
Oui, un fichier .lib est simplement une collection de fichiers .obj. Rien n'a été fait avec le contenu des fichiers .obj, la meilleure analogie est une archive .zip. Oui, vous pouvez supprimer les fichiers .obj après avoir créé le fichier .lib car le fichier .lib contient une copie textuelle des fichiers .obj.
Attention, si vous utilisez un fichier .lib pour distribuer votre produit, vous devrez généralement en créer 4. Debug vs Release build et les deux versions de CRT (/ MT vs/MD).