Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Edition de lien avec une librairie comptenant à la fois du C et du C++

4 réponses
Avatar
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...).

Y a-t-il qq un qui est déjà tombé dans ce pb ?

Vincent.

PS: avec Visual, je n'ai pas le pb.

4 réponses

Avatar
Michael Doubez
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

Ou simplement
g++ tata.o -L. -ltoto
Avec eventuellement --static.

--
Michael
Avatar
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
Avatar
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
Avatar
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.