IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

quelle est la différence entre un .lib et un .dll


Sujet :

C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut quelle est la différence entre un .lib et un .dll
    Bonjour à tous,

    la question est dans le titre.
    Je voulais juste rappeler que:
    - un .lib est une library (bibliothèque en français)
    - une dll est une dynamic link labrary (bibliothèque de lien dynamique?).
    Et que ces noms ne m'aident pas à comprendre réellement la différence entre les deux.

    Je pourrais développer mon post en vous proposant une liste de question, si vous préférez:
    - Pourquoi quand on créé une dll, le .lib est généré aussi?
    - Pourquoi les programmes, pour l'exécution, n'ont besoin que des dll et pas des .lib?
    - Pourquoi le .lib est beaucoup plus petit (en poids) que la dll?
    - A quoi correspond le mot "dynamic" dans "dll"?

    merci.

  2. #2
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Tu utilises une library pour compiler directement ton projet avec.
    L'éditeur de liens mettra a jour les liens qui vont bien avec ta library,
    te permettant ainsi de faire des appels à des fonctions de ta Dll sans te
    poser de questions. Utilisation transparente... mais ligature statique.

    De l'autre coté tu as les Dlls avec une utilisation moins facile.
    Dans ton code, il te faut connaitre les signatures des fonctions que tu vas
    utiliser, et créer autant de variables de type pointeur de fonction que de
    fonctions que tu vas utiliser...

    Puis au démarrage, charger la Dll (LoadLibrary), puis récupérer dans la Dll
    les adresses des fonctions que tu veux utiliser (GetProcAddress).
    Et à partir de cet instant, tu peux appeler ta fonction. La ligature est dynamique...

    Avec les Lib, dès le lancement de l'application, celle ci vérifie que la Dll
    correspondante existe (vérification des dépendances), et l'application
    s'arrête avec un message d'erreur.

    Par contre, avec les Dlls, ton application pourra fonctionner, jusqu'a ce que la Dll doit être chargée.

    J'espere que ca t'eclairera un petit peu...

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Dynamic Link Library = Bibliothèque liée dynamiquement.

    Un .lib est une bibliothèque qui est liée au programme lors de la compilation ("statiquement") : Le .exe contient le code des fonctions de la bibliothèque utilisées par le programme: Il n'a donc besoin du .lib qu'à la compilation, et n'en a donc pas besoin à l'exécution puisqu'il a déjà le code.

    Un .dll est une bibliothèque qui est liée au programme à l'exécution ("dynamiquement") : Le .exe ne contient pas le code : il n'est que dans la DLL. C'est pourquoi la DLL est nécessaire à l'exécution : le code n'existe pas ailleurs.

    Le .lib généré pour un .dll est une Bibliothèque statique d'importation : Il permet de faire en sorte que le programme soit lié au .dll lors de l'exécution.
    Sous Windows, il existe un second moyen de se lier à une bibliothèque dynamique, qui n'utiliser pas le .lib. Mais utiliser le .lib est plus facile, puisque la liaison est automatique.

    Edit: Zut, grillé. Mais je décris mieux les librairies statiques, le post précédent ne décrit que les librairies statiques d'importation...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Il évoque les libs d'import je pense.
    Car y'a 2 types de lib : celles qui sont générées avec la dll (et qui sont pas grosses), et celles générées toutes seules à la place d'une dll (même taille à peu près).
    Y'a 3 phases lorsque tu crées un programme:
    - compilation
    - link
    - exécution

    Les .h, ça permet de compiler en disant "il existe quelque part une fonction void toto();".
    Le link, il va chercher où se trouve la fonction toto. Si elle est dans une dll, elle se trouve donc physiquement ailleurs, quelque part sur le système. Et le linker il sait pas où. Il ne peut pas deviner que toto est dans une dll, et que cette dll s'appelle toto.dll, ou bidon.dll, ou autre chose encore. C'est là que le .lib intervient. Le .lib a été généré avec la dll, et il sert juste à dire "il existe une dll nommée truc.dll qui contient une fonction nommée void toto()". Yeah, le linker est content, il crée ton exe.
    Ton exe, il contient dans une petite table un "message" qui dit "j'utilise toto qui se trouve dans truc.dll, merci de me donner ici l'adresse de cette fonction". Et voilà, un joli exe.
    Quand tu lances l'exe, Windows va lire la petite table. "Hum, il a besoin de la dll truc.dll", et hop Windows cherche cette dll. Il la trouve, et rechercher alors la fonction void toto(). La dll a elle aussi une petite table qui dit "moi j'exporte une fonction void toto(), et voici son adresse" (pour faire simple). Et Windows il fait un copier coller, et alors ton exe peut se lancer. Si la dll n'est pas trouvée ou que void toto n'existe pas dans truc.dll, tu as une erreur.
    Joue avec dependency walker sur tes programmes / dll:
    http://www.dependencywalker.com/
    tu comprendras.

  5. #5
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Ya plus qu'a y mettre de la musique et des ptits dessins pour illustrer
    le tout, et c'est parfait !!!


  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    ok merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/06/2010, 17h57
  2. Réponses: 2
    Dernier message: 25/05/2005, 22h34
  3. Réponses: 5
    Dernier message: 03/05/2005, 19h22
  4. Réponses: 11
    Dernier message: 31/01/2005, 18h48
  5. Quelle est la différence entre le float et le real ?
    Par Manson dans le forum Débuter
    Réponses: 3
    Dernier message: 10/08/2004, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo