Edition de lien avec une librairie comptenant à la fois du C et du C++
4 réponses
Vincent Belaïche
Bonjour,
J'ai un pb avec de l'édition de lien avec g++.
Voilà j'ai un module toto qui contient à la fois un fichier toto1.c et
un fichier toto2.cpp, mais tout ce que toto exporte est supposé être en
extern "C". Et d'ailleurs le toto.h contient les fameux
#ifdef __cplusplus
extern "C" {
#endif
....
....
#ifdef __cplusplus
}
#endif
Mainenant le problem c'est que je veux lier le module toto à un module
tata contenant le main (tata est entièrement en C++). Supposons qu'il
n'y a qu'un seul fichier tata.cpp
Eh bien si je fais qq chose du genre
g++ tata.o toto1.o toto2.o
ça marche
mais si je fais
g++ tata.o libtoto.a
ça ne marche pas.
Dans le second cas il trouve bien la librairie, mais il dit que les
symboles n'y sont pas (mais ils y sont...).
Ou simplement g++ tata.o -L. -ltoto Avec eventuellement --static.
-- Michael
Jean-Marc Bourguet
Vincent Belaïche writes:
Eh bien si je fais qq chose du genre
g++ tata.o toto1.o toto2.o
ça marche
mais si je fais
g++ tata.o libtoto.a
ça ne marche pas.
Aucune raison s'il n'y a pas d'autres librairies en jeu. S'il y en a, il faut savoir que les lib statiques sont traitees sequentiellement et qu'on ne sort d'une lib statique que les objets necessaires a la resolution des symboles indefinis au moment ou elle est traitee. Donc l'ordre des lib a de l'importance et parfois -- c'est generalement considere comme un probleme de conception mais ca peut etre difficile a resoudre -- il faut repeter une lib plusieurs fois.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Vincent Belaïche <vincent.belaiche@gmail.com> writes:
Eh bien si je fais qq chose du genre
g++ tata.o toto1.o toto2.o
ça marche
mais si je fais
g++ tata.o libtoto.a
ça ne marche pas.
Aucune raison s'il n'y a pas d'autres librairies en jeu. S'il y en a, il
faut savoir que les lib statiques sont traitees sequentiellement et qu'on
ne sort d'une lib statique que les objets necessaires a la resolution des
symboles indefinis au moment ou elle est traitee. Donc l'ordre des lib a
de l'importance et parfois -- c'est generalement considere comme un
probleme de conception mais ca peut etre difficile a resoudre -- il faut
repeter une lib plusieurs fois.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Aucune raison s'il n'y a pas d'autres librairies en jeu. S'il y en a, il faut savoir que les lib statiques sont traitees sequentiellement et qu'on ne sort d'une lib statique que les objets necessaires a la resolution des symboles indefinis au moment ou elle est traitee. Donc l'ordre des lib a de l'importance et parfois -- c'est generalement considere comme un probleme de conception mais ca peut etre difficile a resoudre -- il faut repeter une lib plusieurs fois.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
Michael Doubez writes:
On 17 mar, 05:38, Vincent Belaïche wrote: [snip] > Eh bien si je fais qq chose du genre > > g++ tata.o toto1.o toto2.o > > ça marche > > mais si je fais > > g++ tata.o libtoto.a
Essayes: g++ tata.o -L. libtoto.a
Ne devrait rien changer (-L donne le chemin ou chercher les lib specifiee avec -l, comme ton second exemple)
Ou simplement g++ tata.o -L. -ltoto Avec eventuellement --static.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Michael Doubez <michael.doubez@free.fr> writes:
On 17 mar, 05:38, Vincent Belaïche <vincent.belai...@gmail.com> wrote:
[snip]
> Eh bien si je fais qq chose du genre
>
> g++ tata.o toto1.o toto2.o
>
> ça marche
>
> mais si je fais
>
> g++ tata.o libtoto.a
Essayes:
g++ tata.o -L. libtoto.a
Ne devrait rien changer (-L donne le chemin ou chercher les lib specifiee
avec -l, comme ton second exemple)
Ou simplement
g++ tata.o -L. -ltoto
Avec eventuellement --static.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On 17 mar, 05:38, Vincent Belaïche wrote: [snip] > Eh bien si je fais qq chose du genre > > g++ tata.o toto1.o toto2.o > > ça marche > > mais si je fais > > g++ tata.o libtoto.a
Essayes: g++ tata.o -L. libtoto.a
Ne devrait rien changer (-L donne le chemin ou chercher les lib specifiee avec -l, comme ton second exemple)
Ou simplement g++ tata.o -L. -ltoto Avec eventuellement --static.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Vincent Belaïche
Jean-Marc Bourguet a écrit :
Michael Doubez writes:
On 17 mar, 05:38, Vincent Belaïche wrote: [snip]
Eh bien si je fais qq chose du genre
g++ tata.o toto1.o toto2.o
ça marche
mais si je fais
g++ tata.o libtoto.a
Essayes: g++ tata.o -L. libtoto.a
Ne devrait rien changer (-L donne le chemin ou chercher les lib specifiee avec -l, comme ton second exemple)
Ou simplement g++ tata.o -L. -ltoto Avec eventuellement --static.
A+
Merci pour les réponses, en effet le
g++ tata.o -L. -ltoto
ne resout rien -- déjà essayé --- vu que c'est quasi équivalent avec faire
g++ tata.o libtoto.a
Je vais essayer les autre truc (--static...)
À+ Vincent.
Jean-Marc Bourguet a écrit :
Michael Doubez <michael.doubez@free.fr> writes:
On 17 mar, 05:38, Vincent Belaïche <vincent.belai...@gmail.com> wrote:
[snip]
Eh bien si je fais qq chose du genre
g++ tata.o toto1.o toto2.o
ça marche
mais si je fais
g++ tata.o libtoto.a
Essayes:
g++ tata.o -L. libtoto.a
Ne devrait rien changer (-L donne le chemin ou chercher les lib specifiee
avec -l, comme ton second exemple)
Ou simplement
g++ tata.o -L. -ltoto
Avec eventuellement --static.
A+
Merci pour les réponses, en effet le
g++ tata.o -L. -ltoto
ne resout rien -- déjà essayé --- vu que c'est quasi équivalent avec faire