Compilation - Importance de l'ordre des libraries dans une liste

Compilation - Importance de l'ordre des libraries dans une liste - C++ - Programmation

Marsh Posté le 11-04-2005 à 14:34:09    

Bonjour,
 
J'essayae de compiler un programme avec pgCC.
J'en suis à l'édition de liens et je viens de me rendre compte d'un problème.
 
Si j'écris :
 

Code :
  1. pgCC monexec -L/chemin/lib -lfich1 -lfich2


 
Tous semble fonctionner. Les libraries libfich1.a et libfich2.a sont trouvées dans le répertoire /chemin/lib et ajoutées. En l'occurence une fonction fonct (retournand un void) utilisée dans libfich1.a se trouve définies dans libfich2.a .
 
Par contre, si je tente :
 

Code :
  1. pgCC monexec -L/chemin/lib -lfich2 -lfich1


 
La compilation s'arrête et un message d'alerte me prévient que la fonction fonct qui est utilisée dans libfich1 n'a pas été trouvée (alors qu'elle est bien  définie dans libfich2).
 
Je suis étonné de ce comportement car je croyais que l'ordre des libraries déclarée n'avait pas d'importance. Est ce que je me serais trompé ? Dois on respecter un ordre précis pour cette liste ou bien n'y a t-il normalement pas d'importance ? (En gros, est ce que derrière mon problème, il n'y aurait pas qqch de plu grave ?).
 
D'avance merci de votre réponse à cette petite question !

Reply

Marsh Posté le 11-04-2005 à 14:34:09   

Reply

Marsh Posté le 11-04-2005 à 15:20:48    

Ben maintenant tu sais que l'ordre est important :)

Reply

Marsh Posté le 11-04-2005 à 17:51:29    

nathan_g a écrit :

Je suis étonné de ce comportement car je croyais que l'ordre des libraries déclarée n'avait pas d'importance. Est ce que je me serais trompé ? Dois on respecter un ordre précis pour cette liste ou bien n'y a t-il normalement pas d'importance ? (En gros, est ce que derrière mon problème, il n'y aurait pas qqch de plu grave ?)


Avec certaines version de ld, sur certains systèmes, l'ordre est primordial: on doit lister les librairies dans leur ordre de dépendences ( A dépend de B et C, et B dépend de D, donc on a : -lA -lB -lC -lD ou bien -lA -lB -lD -lC).  
 
Dans le cas où on ne peut pas s'en sortir comme ça (A dépend de B et B dépend de A), on utilise une des 2 vieilles gruges enseignée dans les meilleurs dojos:
- soit on fout tout dans le même librairie et on exécute ranlib dessus.
- soit on utilise -lA -lB -lA comme ligne de compil.  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed