-
Inclure une librairie
Bonjour à tous,
Je viens d'apprendre les bases du C++ et j'aurais aimé utiliser des librairies externes offrant de nouvelle fonctionnalité. Après plusieurs recherches, je suis toujours "bloqué" sur la manière d'ajouter une librairie à un projet.
Ayant développer en Java, je ne retrouve pas les même mécanisme qui permettent d'ajouter une bibliothèque. Je me tourne donc vers vous, si vous pouvez m'éclairer à ce sujet, je vous serais grandement reconnaissant.
Prenons l'exemple de cette librairie : RESTBED qui permet de réaliser du REST en c++. Pour moi, les étapes pour ajouter la lib dans mon projet sont les suivantes :
_ Dezippe l'archive
_ Placer le dossier dans la racine du projet
_ Ensuite ?
Malgré plusieurs recherches, je n'arrive pas à comprendre la façon de faire.
Je vous remercie pour vos réponses
-
Passer des bases à REST, c'est un grand pas, mais si tu t'en sens l'audace, pourquoi pas.
En C++, il y a plusieurs sortes de bibliothèques:
- Les bibliothèques dites "header only", c'est à dire seulement constitutées d'en-têtes. C'est le cas de la majorité de boost, et de la STL (qui est automatiquement intégrée).
- Celles écrites en C++ (ou en C), et destinée à une liaison statique (pour les linux, le fichier est un .a)
- Les bibliothèques partagées (shared), celles-ci sont liées dynamiquement (libtruc.so), au lancement du programme.
- et enfin, les biblothèques dynamiques, chargées manuellement par le programme. C'est une façon de faire de concevoir un système de plug-ins.
Ajoutons le code que je qualifie de "volé", qui n'est autre qu'un copié collé du code source de la bibliothèque, et inséré dans le code de l'application.
C'est en général illégal, risqué vis-à-vis des mises à jours de sécurtié, et je n'en parlerai pas plus.
Le cas 4, enfin, est très particulier, et ne te concerne pas (encore?).
La première forme est très simple à utiliser, il suffit d'indiquer au moment de la compilation le dossier où trouver l'en-tête. C'est le role des options de chemins d'include (telle que -I pour gcc).
Les cas 2 et 3 sont similaire à la compilation: il faut donner le chemin des en-têtes permettant d'utiliser le code (comme pour 1), mais aussi le chemin de liaison.
Dans le cas 3, il faut toute fois veiller à ce que la bibliothèque soit trouvable à l'exécution (à coté de l'application, par exemple)
Tu noteras que le cas 1 fonctionne exactement comme du code volé, il n'y a pas d'installation de la bibliothèque à faire une fois compilée.
Dans tous les cas, tu dois installer la version de développement de la bibliothèque pour compiler ton programme. Pour linux, ce sont les packages de type libtruc-dev, pour windows, les versions SDK, à voir sur le site de chaque bibliothèque.
-
J'ai choisi la librairie REST pour avoir un exemple d'intégration de bibliothèque, simplement.
Pour avoir fait plusieurs essais avec différentes librairies, je ne trouve pas toujours les fichiers se terminant par .a ou .so.
La difficulté est d'autant plus grande que je suis sous Mac depuis peu, de plus, je travaille avec CodeBlocks.
Aurais-tu un exemple de bibliothèque "simple" qui me permettrait de visualiser plus simplement ce que tu m'as expliqué.
Merci pour ta réponse
-
Un peu toute, en fait. libcurl ou libxml2, par exemple, ou bien des bibliothèques liées à un format de fichier, comme libpng ou libbmp
Je ne connais pas Mac OS, je ne saurai t'aider plus que ca.
-
Donc sous CodeBlocks, si je procède de la sorte, devrais-je être capable d'utiliser les header de la bibliothèque :
_ Telecharger & extraire la lib
_ Clic droit sur le projet --> Build options
_ Search directories - Compiler
_ Ajouter le dossier
_ Search directories - Linker
_ Ajouter le dossier
A partir de ce moment là, à la compilation, j'obtiens bien les lignes lues dans d'autres sujets :
g++ -Wall -fexceptions -g -I/Users/me/Downloads/libxml -c /Users/me/Desktop/Projects/Library/main.cpp -o obj/Debug/main.o
g++ -L/Users/me/Downloads/libxml -o bin/Debug/Library obj/Debug/main.o
Merci pour tes renseignements
-
C'est bien, mais les chemins à mettre sont en général -I/Users/me/Downloads/libxml/include et -L/Users/me/Downloads/libxml/lib
-
Hum il semblerait qu'il n'y ait pas de trace de dossier lib ou include.
-
Est-ce bien la version "-dev" qui a été installée ?
-
En supposant qu'il n'y a qu'une version qui peut être téléchargée, oui.
-
Tu es sur de ne pas avoir téléchargé les sources de la bibliothèque (qu'il te faut alors compiler toi même)?
Pourrais-u nous donner le lien vers la page où tu l'a téléchargé, et nous indiquer lequel exactement, s'il y a plusieurs versions sur cette page?
-
normalement,il faut aller dans linker setting ,faire add, selectionner les libs du repertoire et les linker ,je pense.