présente mes excuses parce que pour le moment je n'ai pas l'environnement d'expérimenter et de trier les moi-même les questions suivantes:Questions sur linker GCC
1) Disons que j'ai quatre fichiers de bibliothèque: libmylib_super.a
et libmylib_super.so
, mylib_dumb.a
et mylib_dumb.so
. Tout en spécifiant les bibliothèques à lier, quelles sont les différences entre les approches suivantes:
A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D) -lmylib_dumb
2) Définition de -static
de la page man :
Sur les systèmes qui prennent en charge la liaison dynamique , cela empêche l'association de liens h les bibliothèques partagées. Sur les autres systèmes , cette option n'a aucun effet.
Est-ce que cette option de l'éditeur de liens a quelque chose à voir avec la question 1? Ou ... par hasard vont-ils interférer les uns avec les autres?
Merci.
--- --- édité 2009-12-28
Je viens de recevoir mon environnement et expérimenter un peu, en liant pour stimuler date_time bibliothèque. Dites que j'ai trois fichiers de bibliothèque: libboost_date_time-mt-d.a
, libboost_date_time-mt-d.so.1.41.0
, libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0
(lien symbolique).
A.1) -l:libboost_date_time-mt-d.a
==> liant OK, fonctionne même sans le fichier de bibliothèque.
A.2) -l:libboost_date_time-mt-d.a
avec -static
==>d'erreur reliant/usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d
==> OK reliant, œuvres binaires mais nécessite le fichier de bibliothèque partagée.
C.2) -lboost_date_time-mt-d
avec -static
==>d'erreur reliant/usr/bin/ld: cannot find -lm
Toute idée de l'erreur dans A.2 et C.2?
En outre, lors de l'exécution du programme en C.1, il semble rechercher le fichier de bibliothèque partagée avec le nom libboost_date_time-mt-d.so.1.41.0
mais pas le libboost_date_time-mt-d.so
. Ne serait-ce pas gênant si le programme fonctionne sur un système sans la version exacte de la bibliothèque? Quel pourrait être le moyen pratique de gérer la version tout en utilisant la bibliothèque partagée?
Correction: lorsque '-static' est spécifié, seul' .a' sera recherché , pas '.so' – iamamac
oups oui merci –
Vous pouvez trouver m Plus d'informations sur les différentes options sur ce site: http://gcc.gnu.org/onlinedocs/gcc/ –