
Envoyé par
yashiro
En fait je compile sous dev-cpp en ligne de commande sans utiliser l'option -l mais j'ajoute tout de même des lib que j'ai crées, est-ce à dire que cette option ne marche pas sous dev?
En plus lorsque j'ajoute des lib, je suis obligé de le faire en fin de commande du genre:
1 2
|
g++.exe monfich.o ... -o monfich.exe -L"dirlib1 -Ldirlib2..." lib1.a lib2.a... |
est-ce que je suis obligé de mettre ces lib à la fin de la com?
Que font les editeurs de liens? Si on ne considere pas les bibliotheques
partagees (ou dynamiques), ils prennent une serie de fichiers objets et en
font un executable. Comment trouvent-ils les fichiers objets? A deux
endroits:
- sur la ligne de commande
- dans des bibliotheques
Naturellement, on ne desire pas que le contenu complet des
bibliotheques se trouve dans l'executable, donc le comportement
classique des editeurs de liens est le suivant: ils parcourent la
ligne de commande dans l'ordre en maintenant une liste des symboles
dont ils ont besoin.
Quand ils rencontrent un fichier objet, ils l'ajoutent a l'executable
et mettent a jour la liste des symboles non definis, enlevant ceux
defini dans le fichier objet, ajoutant ceux dont le fichier objet a
besoin qui ne sont pas definis dans un fichier objet deja dans
l'executable.
Quand ils rencontrent une bibliotheque, ils cherchent dans celles-ci
les fichiers objets qui definissent des symboles dont ils ont besoin
(et ignorent les autres fichiers objets) et les ajoutent a
l'executable.
Donc quand on utilise des bibliotheques, il faut les mettre apres les
fichiers objets d'une part, et il faut les mettre dans un ordre tel
que les bibliotheques soient placees avant celles dont elles dependent
d'autre part. Quand on a une dependance circulaire, il faut parfois
indiquer plusieurs fois une meme bibliotheque.
Comment specifier une bibliotheque, il y a deux methodes:
- en donnant le nom du fichier
- par un raccourci
Les switchs de gcc servent pour les raccourcis: les -L indiquent une
serie de repertoires ou il faut chercher les bibliotheques, les -l
indique les bibliotheques. Donc si on a
-Ldir1 -ltoto -ltiti -Ldir2 -ltutu
ca veut dire qu'on va prendre la premiere lib de
dir1/libtoto.so, dir1/libtoto.a (et avoir une erreur si aucune existe)
et la premier lib de dir1/libtutu.so, dir1/libtutu.a, dir2/libtutu.so,
dir2/libtutu.a.
Partager