21 juillet 2014

Recherche des lib et dll



Quand on ajoute la librairie XYZ a un projet C/C++ il y a trois informations à donner au compilateur et linkeur :
  1. Le répertoire où se trouve les entêtes des fonctions et classes  (-I /path/to/headers)
  2. Le répertoire où se trouve la librairie (-L /path/to/libs)
  3. Le nom de de la librairie (-l XYZ)
Ce qui est perturbant c’est que bien souvent le nom réel du fichier de cette librairie n’est pas juste ‘XYZ’. En fait quand vous passez l’option "-l XYZ" au linkeur de gcc sous Windows voici, dans l'ordre de recherche, les 7 noms de fichiers qui seront cherché par gcc :





  | "lib" | “XYZ”  | ".dll" | ".a" | ".lib" | Nom cherché
  +-------+--------+--------+------+--------|
1 |   X   |   X    |   X    |  X   |        | libXYZ.dll.a
  +-----------------------------------------|
7 |       |   X    |   X    |  X   |        | XYZ.dll.a
  +-----------------------------------------|
3 |       |   X    |        |  X   |        | XYZ.a
  +-----------------------------------------|
4 |       |   X    |        |      |    X   | XYZ.lib
  +-----------------------------------------|
5 |   X   |   X    |   X    |      |        | libXYZ.dll
  +-----------------------------------------|
6 |       |   X    |   X    |      |        | XYZ.dll
  +-----------------------------------------|
7 |   X   |   X    |        |  X   |        | libXYZ.a
  +-----------------------------------------|


Ceci est répété pour chaque chemin par défaut et pour chaque chemin définit par l'option -L /path/to/libs  jusqu’à ce que l’un de ces 7 noms soit trouvé.

Notez que toutes les combinaisons ne sont pas testées: libXYZ.lib ne sera pas cherché par le linkeur.