Question

Je sais très peu de choses sur les autres de DLL et LIB que qu'ils contiennent du code vital requis pour un programme à exécuter correctement - les bibliothèques. Mais pourquoi les compilateurs les génèrent du tout? Ne serait-il plus facile d'inclure simplement tout le code dans un seul exécutable? Et quelle est la différence entre DLL et LIB de?

Était-ce utile?

La solution

Il existe des bibliothèques statiques (LIB) et les bibliothèques dynamiques (DLL).

Les bibliothèques sont utilisées parce que vous pouvez avoir le code que vous souhaitez utiliser dans de nombreux programmes. Par exemple, si vous écrivez une fonction qui compte le nombre de caractères dans une chaîne, cette fonction sera utile dans de nombreux programmes. Une fois que vous obtenez fonctionner correctement cette fonction vous ne voulez pas avoir à recompiler le code à chaque fois que vous l'utilisez, vous mettez le code exécutable pour cette fonction dans une bibliothèque, et l'éditeur de liens peut extraire et insérer le code compilé dans votre programme . Les bibliothèques statiques sont parfois appelées « archives » pour cette raison.

Les bibliothèques dynamiques prennent un peu plus loin. Il semble inutile d'avoir plusieurs copies des fonctions de bibliothèque qui prennent place dans chacun des programmes. Pourquoi ne peuvent-ils partagent tous une copie de la fonction? C'est ce que les bibliothèques dynamiques sont pour. Plutôt que de construire le code de la bibliothèque dans votre programme quand il est compilé, il peut être exécuté en cartographiant dans votre programme est chargé en mémoire. Plusieurs programmes en cours d'exécution en même temps qui utilisent les mêmes fonctions peuvent tous partager une copie, la mémoire d'économie. En fait, vous pouvez charger des bibliothèques dynamiques uniquement au besoin, en fonction du chemin à travers votre code. Aucun point d'avoir les routines d'imprimante prenant la mémoire si vous ne faites aucune impression. D'autre part, cela signifie que vous devez avoir une copie de la bibliothèque dynamique installée sur chaque machine votre programme est exécuté. Cela crée son propre ensemble de problèmes.

À titre d'exemple, presque tous les programmes écrits en « C » aura besoin des fonctions d'une bibliothèque appelée la bibliothèque d'exécution « C, bien que quelques programmes auront besoin de toutes les fonctions. Le moteur d'exécution C est disponible en deux versions statiques et dynamiques, de sorte que vous pouvez déterminer quelle version votre programme utilise en fonction des besoins particuliers.

Autres conseils

Un autre aspect est la sécurité (obscurcissement). Une fois un morceau de code est extrait de l'application principale et mis dans un « séparé » Dynamic-Link Library, il est plus facile d'attaquer, d'analyser (ingénierie inverse) le code, car il a été isolé. Lorsque le même morceau de code est conservé dans une bibliothèque LIB, il fait partie de la compilation (reliée) application cible, et ceci donc plus difficile à isoler (différencier) ce morceau de code à partir du reste des binaires cibles.

Une raison importante pour la création d'une DLL / LIB plutôt que de compiler le code dans un fichier exécutable est la réutilisation et la réinstallation. Le Java moyen ou une application .NET (par exemple) seront les plus susceptibles d'utiliser plusieurs 3ème partie (ou cadre) bibliothèques. Il est beaucoup plus facile et plus rapide à compiler simplement contre une bibliothèque pré-construit, plutôt que de devoir compiler tout le code 3ème partie dans votre application. Compiler votre code dans les bibliothèques encourage aussi les bonnes pratiques de conception, par exemple la conception de vos classes à utiliser dans différents types d'applications.

Une DLL est une bibliothèque de fonctions qui sont partagés entre d'autres programmes exécutables. Il suffit de regarder dans votre répertoire windows / system32 et vous trouverez des dizaines d'entre eux. Lorsque votre programme crée une DLL crée également normalement il un fichier lib pour que l'application * .exe programme peut résoudre les symboles qui sont déclarés dans la DLL.

A .lib est une bibliothèque de fonctions qui sont liés statiquement à un programme - ils ne sont pas partagés par d'autres programmes. Chaque programme qui lie un fichier * .lib a tout le code dans ce fichier. Si vous avez deux programmes a.exe et b.exe qui pointent avec C.lib alors chaque A et B contiennent tous deux le code C.lib.

Comment vous créez DLL et libs dépendent du compilateur que vous utilisez. Chaque compilateur fait différemment.

Une autre différence réside dans la performance.

Comme la DLL est chargée lors de l'exécution par le Exe (s), le Exe (s) et le travail de DLL avec le concept de mémoire partagée et donc le rendement est faible par rapport à la liaison statique.

D'autre part, un .lib est un code qui est lié statiquement au moment de la compilation dans tous les processus qui demande. D'où l'Exe (s) devra mémoire unique, augmentant ainsi le rendement du procédé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top