Comment ajouter des bibliothèques en C++?
Oui c'est une question stupide... Cependant, dans mes deux classes C++ nous n'avons pas le faire du tout (sauf pour les bibliothèques natives: iostream, iomanip, etc.)... Ma question est: quelqu'un peut-il fournir un lien qui donne l'explication générale de l'ajout de bibliothèques C++?
Je me rends compte que ce #comprennent des moyens; c'est juste que je n'ai aucune idée sur l'éditeur de liens/les répertoires en C++ IDE.
Tant question courte; pourrais-je avoir une explication des termes utilisés pour lier les bibliothèques en C++?
Je suis à l'aide de c::b w/MinGW.
- le compilateur/linker utilisez-vous?
- Ceci est spécifique à votre compilateur c++/environnement de développement. Donc, ce que vous utilisez ?
- Je suis à l'aide de c::b w/ MinGW
- -1 Avez-vous lu la documentation de votre compilateur? Avez-vous googlé un peu?
Vous devez vous connecter pour publier un commentaire.
Cette serait probablement vous intéresser, mais voici la version courte:
Lorsque vous vous assemblez les
.cpp
,.c
ou tous les fichiers, chaque unité de traduction (qui est, chaque fichier) génère un fichier objet. Lors de la création de l'exécutable final, vous combinez tous les fichiers objets dans un seul binaire. Pour les bibliothèques statiques, de la compilation de la bibliothèque statique (.a
ou.lib
) ainsi que tous les fichiers de l'objet dans le fichier binaire. Pour lier les objets dynamiques partagés (.so
ou.dll
), le binaire est créé avec les appels à la global offset table et de vous en informer l'éditeur de liens que vous souhaitez faire un lien avec l'objet partagé et le chargeur de système d'exploitation construit l'image appropriée lorsque vous exécutez le programme.Une explication générale de termes utilisés pour lier les bibliothèques en C++
En commençant par...
traduction - C'est là que le code de haut niveau (C, Fortran ou quoi que ce soit) est traduit en code assembleur par unité de traduction. De la sorte, chaque
.cpp
fichier est traduit en interne à l'assemblée pour une architecture spécifique.assembler - Génère des fichiers de l'objet à partir de l'assembly généré. Les fichiers objets sont presque code machine, mais ils ont beaucoup de "externes non résolus", qui vous permet de penser que les pointeurs de fonction réelle définitions.
reliant - Ce qui prend tous vos fichiers objets et les met en un tout cohérent binaire, soit une dynamique de l'objet partagé ou d'un fichier exécutable. Vous devez dire à l'éditeur de liens où il doit trouver toutes les personnes externes non résolus dans l'étape précédente, ou ils apparaissent comme des erreurs ici.
Maintenant, le binaire se trouve sur le disque, ce qui est attend jusqu'à ce que...
chargeur - Le système d'exploitation charges d'un binaire hors du disque, qui contient toutes les informations nécessaires pour construire le programme de l'image. Alors que les détails sont extrêmement plate-forme spécifique, le chargeur est généralement chargé de trouver tous les la bibliothèque partagée références généré par l'éditeur de liens, chargement (de manière récursive, car chaque bureau peut avoir ses propres dépendances) et de les mettre dans l'espace mémoire du programme.
C'est un vaste sujet, et une je n'ai pas envie de fournir une réponse définitive. Cependant, puisque vous dites que vous utilisez Code::Blocks, c'est la séquence pour ajouter une bibliothèque à votre projet: