Codeblocks : installer une bibliothèque (librairie)

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - Modifié le 15 mai 2022 à 16:40
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 mai 2022 à 13:02

Installer sous Codeblocks avec MinGW une bibliothèque (librairie) compilée pour MinGW




Prérequis

Vous disposez d'une version de Codeblocks fonctionnant avec le compilateur MinGW et vous avez récupéré un binaire d'une bibliothèque externe que vous voulez utiliser, et qui est aussi compilée pour MinGW.


Vous devez savoir si vous disposez d'une version 64 bits ou 32 bits de MinGW et utiliser une bibliothèque compilée pour MinGW pour la même architecture (64 bits ou 32 bits).

Si vous avez installé Codeblocks avec une version embarquant MinGW à partir de cette page, vous disposez d'une version 64 bits, sauf si vous avez téléchargé une version spécifique 32 bits.

Dans l'exemple qui suit, nous utiliserons la bibliothèque libcurl pour illustrer la méthode à utiliser, c'est à dire, à la date à laquelle ces lignes sont écrites, et pour la version actuelle stable de libcurl, ceci :

https://curl.se/windows/dl-7.83.1/curl-7.83.1-win64-mingw.zip
(aller voir la version à jour sur https://curl.se/download.html ou sur https://curl.se/windows/)

Cette méthode peut être utilisée avec Codeblocks utilisant MinGW, pour n'importe quelle bibliothèque compilée pour MinGW.

Ce que vous téléchargez doit contenir les fichiers
.h
nécessaires au fonctionnement des
#include
et des fichiers
 .a
qui contiennent les binaires, c'est à dire les éléments précompilés de la bibliothèque, et éventuellement des
.dll
.

Méthode

Décompression dans un répertoire centralisant les librairies externes utilisées

Décompressez l'archive contenant la bibliothèque compilée dans un répertoire pas trop compliqué, et avec un nom sans espaces.

Par exemple :
c:\libs\curl-7.83.1-win64-mingw\

Intégration au projet Codeblocks : 2 étapes

Dans Codeblocks, il y a 2 choses à faire pour qu'un projet puisse utiliser une bibliothèque additionnelle :

Indiquer au compilateur où il doit trouver les fichiers .h

Indiquer au compilateur où il doit trouver les fichiers
.h
permet à celui-ci de ne pas générer d'erreurs lorsque l'on insère des #include correspondant à la librairie dans le code source.

On fait cela dans : Project - Build options... - Cliquer sur la racine du projet (pas sur les cibles Debug ou Target, sinon les paramètres ne s'appliquent qu'à la cible)

Onglet "Search directories" - Add - aller chercher le répertoire de la librairie qui contient les .h et sélectionner ce répertoire.

Par exemple, dans le cas de libcurl ce répertoire est
c:\libs\curl-7.83.1-win64-mingw\include
lequel contient "curl". Comme la documentation de la bibliothèque libcurl indique de faire
#include <curl/curl.h>
, il faut sélectionner le répertoire parent de "curl" afin de
curl.h
soit accessible par un chemin
curl/curl.h
.

Indiquer à l'éditeur de liaisons où il doit trouver les binaires de la bibliothèque

Indiquer à l'éditeur de liaisons où il doit trouver les binaires de la bibliothèque permet à celui-ci de générer l'exécutable après compilation. Pour l'environnement MinGW, les binaires de la bibliothèque sont des fichiers dont l'extension est
.a
.

On fait cela dans : Project - Build options... - Cliquer sur la racine du projet (pas sur les cibles Debug ou Target, sinon les paramètres ne s'appliquent qu'à la cible, sauf si on utilise des bibliothèques de débogage pour une librairie donnée, là il devient utile de distinguer selon les cibles)

Onglet "Linker settings" - Add - aller chercher le répertoire de la librairie qui contient les
.a
(par exemple, dans le cas de libcurl
c:\libs\curl-7.83.1-win64-mingw\lib
) et sélectionner les parties de la librairie dont on a besoin dans le cadre du projet.

Si vous ne savez pas, voyez la doc de la librairie (ou, au jugé, compiler le projet, voir les messages d'erreur, et ajouter les parties nécessaires, ou, à la brute, ajouter tout :-).

Remarques

fichiers .dll

En fonction de la façon dont vous paramétrez votre projet (liaison dynamique ou statique), vous pouvez avoir à copier des
.dll
dans le répertoire de l'exécutable (ou dans le PATH de Windows) pour que le chargement dynamique de la bibliothèque puisse avoir lieu.

Dans le cas de libcurl, les
.dll
sont contenus dans
c:\libs\curl-7.83.1-win64-mingw\bin
.

Il seraient à ajouter, par exemple, dans le répertoire "Target" du projet, contenant l'exécutable généré par la compilation (ou quelque part dans le PATH), et cela est nécessaire uniquement en cas de compilation avec liaison dynamique et pour lancer l'exécutable en dehors de l'environnement de développement.

Si vous ne l'avez pas fait, vous vous en apercevrez lors de l'exécution (en double cliquant sur le fichier
.exe
, donc) : un message va avertir du fait que telle ou telle
.dll
n'a pas été trouvée.

Chemins relatifs ou absolus

Lors que l'on paramètre Codeblocks, après sélection d'une ressource, il vous est demandé "Keep this as a relative path ?".

En cas de réponse affirmative, cela signifie que Codeblocks ne va pas conserver le chemin absolu vers la ressource indiquée (par exemple "
c:\libs\curl-7.83.1-win64-mingw\lib\libcurl.a
)", mais seulement le chemin relatif par rapport au répertoire du projet (par exemple, quelque chose comme "
..\..\..\libs\curl-7.83.1-win64-mingw\lib\libcurl.a
").

C'est utile de spécifier un chemin relatif si les ressources sont accessibles sous le répertoire du projet, car le projet demeurera compilable sur une autre machine avec Codeblocks, les ressources étant au même endroit relativement au répertoire du projet, et ce quelque soit l'emplacement du projet sur la nouvelle machine.

En revanche, si les ressources sont ailleurs (il est mieux de les mettre ailleurs, pour regrouper les librairies à un endroit identifié où les différents projets pourront les trouver, comme
c:\libs
et éviter de les dupliquer), et que l'on déplace le projet, les références seront rompues. Dans ce cas, vous devriez spécifier des chemins absolus.

Ne pas copier la librairie externe dans les répertoire MinGW de Codeblocks

Cela peut marcher, et vous tomberez éventuellement sur des tutoriels qui vous disent de le faire.

Cependant, je vous déconseille de faire cela, sauf si vous voulez :
  • faire un fouillis de votre installation de Codeblocks
  • devoir réinstaller toutes vos librairies parce que vous mettez à jour Codeblocks ou MinGW, et que les répertoires par défaut de Codeblocks ou MinGW sont supprimés et recréés dans ce processus
  • ne pas savoir où se trouve telle version de la librairie qui seule compile avec tel source que vous utilisez
  • ne pas savoir comment mettre à jour vos librairies

Terminologie

Dans les lignes qui précèdent, on a utilisé le terme "bibliothèque" ou "librairie". Ce dernier est un anglicisme (du terme "library"), qui est souvent utilisé par les programmeurs.

On devrait dire, en bon français, "bibliothèque", mais on a supposé que les deux termes sont synonymes pour notre fiche :-)


Dal


1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
25 mai 2022 à 13:02
faq/35736
0