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é
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    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 287
    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 expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    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é
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    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 287
    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, 16h57
  2. Réponses: 2
    Dernier message: 25/05/2005, 21h34
  3. Réponses: 5
    Dernier message: 03/05/2005, 18h22
  4. Réponses: 11
    Dernier message: 31/01/2005, 17h48
  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, 17h26

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