Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

différence entre lib et dll, quel intérêt

4 réponses
Avatar
Mouarf
hello les gens,

je me pose des questions quant à l'intérêt des dll ou des librairies
statiques.

Quelle est la différence entre les 2 ormis que les .lib sont utilisés lors
de la compilation et les dll lors de l'utilisation de l'appli?

Est ce qu'en utilisant une .lib, aucune dll n'est nécessaire pour la suite?
Dans ce cas à l'inverse de la dll, les fonctions ne peuvent pas être
modifiées après compilation?

En utilisant un .lib, le code sera compilé directement dans l'exécutable?
Avec une dll, le code est dans la dll et non dans l'exécutable?

C'est bien ça?

Merci d'avance pour aider un néophite.

4 réponses

Avatar
Alexandre
bonjour,

Quelle est la différence entre les 2 ormis que les .lib sont utilisés lors
de la compilation et les dll lors de l'utilisation de l'appli?



la lib est "greffée" dans l'executable. Si tu as 150 applications qui
utilisent la même lib, alors les 150 contiendront le code de cette lib...
Perte de place.


Est ce qu'en utilisant une .lib, aucune dll n'est nécessaire pour la
suite?



ça dépend de la lib.

Dans ce cas à l'inverse de la dll, les fonctions ne peuvent pas être
modifiées après compilation?



????

En utilisant un .lib, le code sera compilé directement dans l'exécutable?
Avec une dll, le code est dans la dll et non dans l'exécutable?


c'est à peu près ça.

attention aux faux amis : l'extension lib ne te désigne pas forcément une
bibliothèque... Des fichiers d'importation de DLL, par exemple, portent
fréquemment l'extension lib, mais ne contiennent pas de code.

Le vocabulaire correct de ta question serait : bibliothèque statique contre
bibliothèque dynamique. L'argument précédent plaide largement en faveur de
la bibliothèque dynamique.
Avatar
Remi Thomas
Alexandre wrote:
bonjour,

Quelle est la différence entre les 2 ormis que les .lib sont
utilisés lors de la compilation et les dll lors de l'utilisation de
l'appli?



la lib est "greffée" dans l'executable. Si tu as 150 applications qui
utilisent la même lib, alors les 150 contiendront le code de cette
lib... Perte de place.


Est ce qu'en utilisant une .lib, aucune dll n'est nécessaire pour la
suite?



ça dépend de la lib.

Dans ce cas à l'inverse de la dll, les fonctions ne peuvent pas être
modifiées après compilation?



????

En utilisant un .lib, le code sera compilé directement dans
l'exécutable? Avec une dll, le code est dans la dll et non dans
l'exécutable?


c'est à peu près ça.

attention aux faux amis : l'extension lib ne te désigne pas forcément
une bibliothèque... Des fichiers d'importation de DLL, par exemple,
portent fréquemment l'extension lib, mais ne contiennent pas de code.

Le vocabulaire correct de ta question serait : bibliothèque statique
contre bibliothèque dynamique. L'argument précédent plaide largement
en faveur de la bibliothèque dynamique.



Salut,

Effectivement cela permet de mutualiser du code mais aussi
- de travailler en mode dynamique, càd charger dynamiquement un bout de code
- d'étendre certain produit qui n'acceptes que d'invoquer une méthode dans
une DLL
- de localiser un produit en mettant les boites de dialogue dans une DLL
spécifique
- de diffuser un composant avec un minimum de controle sur la license et
utilisable en VB6.
- d'écrire certain objets COM (un .OCX c'est une DLL)
- de rendre ton EXE non tributaire de la présence ou non d'une DLL
(chargement explicite LoadLibrary) (voir point 1)
- de faire la café (si ta cafetiére supporte un pilotage via une DLL)

Rémi

--
Rémi Thomas - MVP Visual C++
Développeur Windows indépendant
http://www.xtware.com/cv
Avatar
Alexandre
bonsoir,

- de rendre ton EXE non tributaire de la présence ou non d'une DLL
(chargement explicite LoadLibrary) (voir point 1)



ben si ton code est dans l'EXE tu n'es tributaire de rien ;-)

- de faire la café (si ta cafetiére supporte un pilotage via une DLL)



ça on peut le faire aussi avec une liaison statique ;-)


Rémi

--
Rémi Thomas - MVP Visual C++
Développeur Windows indépendant
http://www.xtware.com/cv





Avatar
adebaene
"Alexandre" wrote in message news:<41912667$0$7424$...
bonjour,

> Quelle est la différence entre les 2 ormis que les .lib sont utilisés lors
> de la compilation et les dll lors de l'utilisation de l'appli?

la lib est "greffée" dans l'executable. Si tu as 150 applications qui
utilisent la même lib, alors les 150 contiendront le code de cette lib...
Perte de place.


Faux! Tout l'intérêt d'une lib statique, c'est que si ton executable
n'utilise que 2 fonctions de la lib, seules ces 2 fonctions se
retrouveront dans ton exe final, même si la lib contient 150
fonctions. C'est tout l'intérêt des libs statiques.
Au contraire, avec une DLL, tes 150 fonctions seront toujours dans la
DLL (et en mémoire virtuelle), même si tu n'en utilises jamais que 2.

Histoire de modérer un peu les propos enthousiastes concernant les
librairies dynamiques, il faut également ajouter que la gestion des
versions successives de logiciels devient rapidement infernalle quand
on a beaucoup de modules (càd de DLLs) : c'est le fameux "DLL Hell" de
gestion des incompatibilités entre versions d'une DLL utilisée par
plusieurs programmes. .NET résoud partielllement cela grâce au
versionning, mais ce n'est pas encore la panacée. Demanière générale,
en ce qui concerne le déploiement, je suis un partisan du "plus c'est
simple, mieux ca marche" : pas la peine de rajouter des modules, des
composants, etc.. dans tous les sens si ca n'apporte pas une
plus-value.

Il faut aussi noter que les DLLs sont indipensables dans un certain
nombre de "cas particuliers" comme le hooking, l'injection de code,
les composants COM in-process, etc...

Enfin, l'appel d'une fonction dans une DLL à un surcoût *le plus
souvent négligeable*, mais ca peut être un facteur en prendre en
compte pour du code critique qui tourne en boucle serrée.

Bref, le choix est un peu plus compliqué que cela, et il faut traîter
les problèmes au cas par cas...

Arnaud
MVP - VC