2010-05-15 8 views
1

J'ai terminé mes deux classes C++ 1/2 et nous n'avons rien traité sur Lier aux bibliothèques ou ajouter des bibliothèques supplémentaires au code C++. J'ai eu un jour de foin en essayant de comprendre cela; J'ai été incapable de trouver des informations de base link ing aux objets. Au départ, je pensais que le problème était l'IDE (Netbeans et Code :: Blocks). Cependant, j'ai été incapable d'obtenir la configuration wxWidgets et GTKMM.Éditeur de liens, bibliothèques et répertoires Informations

Quelqu'un peut-il me diriger dans la bonne direction sur la terminologie et les informations de base sur les fichiers #includ et les fichiers link dans une application Cpp? Fondamentalement, je veux/besoin de tout savoir en ce qui concerne ce processus. La différence entre .dll, .lib, .o, .lib.a, .dll.a. La différence entre un .h et une "bibliothèque" (.dll, .lib correcte?)

Je comprends que j'ai besoin de lire la documentation du compilateur que j'utilise; Cependant, tous les compilateurs (que je connais) utilisent un éditeur de liens et des en-têtes; J'ai besoin d'apprendre cette information.

S'il vous plaît pointez-moi dans la bonne direction! :]

Jusqu'à présent, sur ma quête, j'ai trouvé:

  • Linker liens bibliothèques déjà compilés à votre projet.
  • .a fichiers sont des bibliothèques statiques (.lib dans les fenêtres)
  • .dll dans les fenêtres est une bibliothèque partagée (.so en * nix)
+1

Jetez un coup d'oeil à la question comme ["Différence entre la bibliothèque statique et partagée en C"] (http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-library-in-c) et ["bibliothèque statique, mais j'ai toujours besoin d'en-têtes?"] (http://stackoverflow.com/questions/2612027/static-library-but-i-still-need-headers) –

+0

@Georg; merci cela éclairci beaucoup.J'ai réussi à trouver l'intro de FSF à GCC qui a éclairci beaucoup d'informations. –

Répondre

0

Sur un système Unix, vous trouverez généralement des bibliothèques dans /usr/lib. L'extension .a indique que vous avez affaire à un fichier d'archive créé par exemple avec ar. Ils sont créés à partir de fichiers objets avec l'extension .o. L'éditeur de liens peut ensuite résoudre les références lors de la compilation. Ils sont appelés bibliothèques statiques, car le code machine du fichier objet est copié dans l'exécutable final.

Si vous considérez par exemple la bibliothèque mathématique, vous trouverez la bibliothèque elle-même au /usr/bin/libm.a et le fichier d'en-tête correspondant dans votre répertoire include (par exemple: /usr/include/math.h). Vous devez inclure l'en-tête math.h pour le compilateur et pour l'éditeur de liens spécifier la bibliothèque libm.a pour résoudre les références, qui ont été laissées par le compilateur.

Les bibliothèques partagées utilisent l'extension .so. Ils sont utiles si vous voulez avoir un petit fichier exécutable. Ici, les références ne sont pas résolues par l'éditeur de liens, mais lorsque l'exécutable est démarré, le chargeur recherche dynamiquement la bibliothèque et la charge en fonction des références non résolues en mémoire. .dll sont des bibliothèques liées dynamiquement pour Microsoft Windows et je ne suis pas très familier avec eux, mais je suppose, que les étapes impliquées sont similaires.

+0

Quelque chose s'est mélangé - * "Quand vous utilisez maintenant include [...], vous devez inclure" *? –

+0

@Georg: J'étais pressé. Je l'ai nettoyé un peu. – Lucas