différence entre les options -l et -L de g++.exe
Quelle est la différence entre les options -L et -l de g++.exe?
Re: différence entre les options -l et -L de g++.exe
Citation:
Envoyé par yashiro
Quelle est la différence entre les options -L et -l de g++.exe?
-L rajoute un répertoire dans la liste des répertoires à visiter pour trouver les bibliothèques à lier.
-l rajoute une bibliothèque particulière.
Code:
1 2
| -L[chemin du rep]
-l[nom court de la biblio : toto pour libtoto] |
OK pour -l et -L mais sous dev-cpp alors???
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:
Code:
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?
puis-je me passer de l'option -l de g++.exe????
Lorsque j'ai crée une librairie en c/c++, pour l'utiliser je suis obligé non seulement de donner la direction des libs mais aussi de l'ajouter explicitement avec l'option -l
Y'a-t-il un moyen de l'intégrer dans la liste des librairie standard, pour que je n'ai plus besoin de l'ajouter explicitement?
Re: OK pour -l et -L mais sous dev-cpp alors???
Citation:
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:
Code:
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?
Pas compris. dans tous les compilateurs, il faut rajouter les librairies supplémentaires, que ce soit GCC ou VS, par exemple. -L indique le dossier où chercher les librairies, on ne sait pas encore lesquelles. Avec -l, on lui précise ce qu'il doit chercher, et pour celà, il a le chemin standard plus les chemins indiqués par -l.
Re: OK pour -l et -L mais sous dev-cpp alors???
Citation:
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:
Code:
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
Code:
-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.