Pourquoi linker les librairies

Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- - Dernière réponse : racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
- 10 sept. 2007 à 02:10
Bonjour,

cela fait quelques temps que je programme en C et je me pose une question depuis le début et je n'ai pas encore trouvé ma réponse... Je comprend l'interet des #include mais je ne comprend pas pourquoi parfois il faut lier les librairies avec #pragma comment(...), en fait j'aimerai savoir précisément ce qui se passe quand on link une librairie et pourquoi il faut le faire.

Merci pour vos réponses

Apprendre le VB6
Afficher la suite 

8 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
0
Merci
Des includes, ca contient rien juste quelques définitions de fonction. Le code associé a ton include est dans la librairie.
Commenter la réponse de luhtor
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Ah d'accord, merci bien pour ton aide :p

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
Salut,
Le fichier LIB contient une référence des fonctions d'une DLL. Elle contient les noms des fonctions exportées avec leurs points d'entrée, le nombre et types de paramètres à passer etc. Cette référence sera injectée, par l'éditeur de liens, comme table d'import dans l'exécutable à générer. L'implémentation du code se trouve elle dans la DLL associée. Par défaut sous Windows, les compilateurs ajoutent aux projets kernel32.lib, user32.lib, gdi32.lib ect. Ces dernières sont respectivements associées à kernel32.dll, user32.dll et gdi32.dll. Pour utiliser une DLL non reconnue par défaut, on doit ajouter sa LIB  au projet. Sinon, on devra charger la DLL avec LoadLibrary() et récupérer les adresses des fonctions avec GetProcAddress() après avoir défini au préalable un type de pointeur pour chaque fonction à utiliser. Le type de pointeur définit la convention d'appel de la fonction, le paramètre de sortie et les paramètres d'entrée.
Commenter la réponse de racpp
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
0
Merci
Ca c'est pour une lib associée à une dll, pour un lib statique, c'est différent.
Commenter la réponse de luhtor
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
luhtor >> Oui. L'auteur de la question n'a pas parlé de lib statique. Sa question se rapporte plutôt à la lib associée à une dll.
Commenter la réponse de racpp
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
0
Merci
C'est pas précisé.
Commenter la réponse de luhtor
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Bonjour et merci pour vos réponses.

Je suis venu poser cette question en voyant :

#pragma comment(lib, "ws2_32.lib")

quand j'ai voulu utiliser les sockets. J'ai essayé sans cette ligne, ça ne fonctionnait pas, et comme c'est pas la première fois que j'entend parler du fait de lier les librairies j'avais envie de comprendre, maintenant quelle est la différence entre une librairie statique et un librairie lié à une DLL ?

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7
0
Merci
ws2_32.lib est associée à ws2_32.dll. Une lib statique contient l'implémentation de fonctions. Ces fonctions seront  injectées, par l'éditeur de liens,  dans le code de l'exécutable au lieu d'être appelées dans une dll externe.
Commenter la réponse de racpp