[GCC] Librairie dynamiques et statiques
Bonjour,
Je ne pensais pas me prendre la tête avec un truc aussi bête alors je demande de l'aide via ce forum :) Je suis sous Debian et j'utilise GCC. J'ai créé des librairie statiques pour un projet via la commande "ar". J'ai écrit un programme qui utilise ma suite de librairie statique ainsi qu'OpenGL et d'autre libs utiles (pthread, Cg, ...) et donc lorsque j'ai un problème lors du link. Soit je link avec la commande du style :
Code:
gcc -L../lib -lmyLib -lGL -o libTest libTest.o
Or dans ce cas il me dit qu'il ne peut trouver -lmyLib1 car vu que c'est des librairies statiques elles ont l'extention .a (libmyLib.a) et non .so. J'ai donc mi sle flag -static, mais là il ne me trouve plus -lGL puisqu'elle est en .so elle... J'ai donc essayer la combinaison de -static et de -dynamic au cas où :
Code:
gcc -L../lib -static -lmyLib -dynamic -lGL -o libTest libTest.o
Mais cela ne fonctionne pas non plus (en fait je m'y attendais :P). Il me dit toujours qu'il ne peux trouver -lGL. Je pourrais compiler mes librairies en dynamique, mais je préfèrerais qu'elles soient statiques (pour la portabilitée) et à l'inverse, je veux garder des librairies en dynamique pour ne pas que ce soit trop lourd.
Ma question est donc simple : comment fait-on pour linker à la fois des librairies statiques et des librairies dynamique à un excutable ?
Merci d'avance pour votre aide :)
EDIT : Je suis allé un peu vite en fait. Lorsque je ne met pas le -static, il ne me trouve pas de référence vers la fonction définie dans mylib. Peut-être un problème de librairie donc. Je recherche sur cette piste.
Ordre des arguments de la ligne de commande
MDR !
Bon j'ai trouvé la solution à mon problème en fait. Effectivement il était très con :D J'avais du mal à comprendre pourquoi un truc aussi simple ne fonctionnait pas puisque les librairies statiques sont simplement un groupement de fichier .o
La solution à mon problème réside dans l'ordre des argument de la ligne de commande gcc. Je m'en sert souvent et pourtant je n'ai jamais eu ce problème. Seulement je viens de lire que les options de link se mettent après le fichier à construire. Pas besoin de -static ou de -dynamic car elles servent à forcer l'utilisation des librairies statiques/dynamiques comme je le pensais. En somme voici à quoi ressemble ma commande :
Code:
gcc -o libTest libTest.o -L../lib -lmyLib -lGL
Tout connement :) Des fois je me trouve stupide -_- Ce quie me tue c'est que ça fait maintenant un moment que je code, mais je n'ai jamais eu ce problème. C'est surement parce que c'est la première fois que je compile des lib statiques. Vu que c'est des .o elle doivent être placer avec les autres fichiers objets à compiler. Ce problème ne se produit apparament pas lorsqu'il s'agit de librairie dynamique, mais je me trompes peut-être.
Bon et bien j'ai fait les questions et les réponses. Si d'autres font la même erreur que moi, ça leur servira :)
A+ ;)