OVH Cloud OVH Cloud

Link entre C++ et C

6 réponses
Avatar
Seb
Bonjour,

J'ai dans mon code C++ :

extern "C" void MaFonction(int, int);

Dans un fichier ".c" j'ai le code de cette fonction. Dans mon makefile, les
deux sources sont compilés. Au moment de l'édition de lien j'ai ceci

undefined reference to 'MaFonction'

Normalement c'est la méthode pour utiliser du C dans du C++, je ne comprend
vraiment pas ce qu'il se passe. Auriez vous une idée.

PS : j'ai essayé au moment de l'édition de lien de changer l'ordre de mes .o
sans succès, et je compile mon fichier .c avec mon compilateur C++

Sebastien

6 réponses

Avatar
Frédéric Gourul
"Seb" a écrit dans le message de
news:bth14v$oen$


Normalement c'est la méthode pour utiliser du C dans du C++, je ne
comprend

vraiment pas ce qu'il se passe. Auriez vous une idée.


c'est exact, mais je crois que les accolades sont obligatoires, je n'ai
jamais essayé de les omettres, mais je pense que le problème doit venir de
là...

extern "C" {
void MaFonction(int, int);
}

Avatar
Jean-Marc Bourguet
"Seb" writes:

Bonjour,

J'ai dans mon code C++ :

extern "C" void MaFonction(int, int);

Dans un fichier ".c" j'ai le code de cette fonction. Dans mon makefile, les
deux sources sont compilés. Au moment de l'édition de lien j'ai ceci

undefined reference to 'MaFonction'

Normalement c'est la méthode pour utiliser du C dans du C++, je ne comprend
vraiment pas ce qu'il se passe. Auriez vous une idée.

PS : j'ai essayé au moment de l'édition de lien de changer l'ordre de mes .o
sans succès, et je compile mon fichier .c avec mon compilateur C++


Es-tu sur qu'il te compile ton fichier .c comme etant du C et non du
C++. Sinon il ne faut pas le extern "C".

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
Seb
"Frédéric Gourul" a écrit dans le message
news: bth2b6$i6c$
"Seb" a écrit dans le message de
news:bth14v$oen$


Normalement c'est la méthode pour utiliser du C dans du C++, je ne
comprend vraiment pas ce qu'il se passe. Auriez vous une idée.


c'est exact, mais je crois que les accolades sont obligatoires, je
n'ai jamais essayé de les omettres, mais je pense que le problème
doit venir de là...

extern "C" {
void MaFonction(int, int);
}


Je ne pense pas, Le "Stroustrup a un exemple sans les accolades en extern
"C".

J'ai quand meme essayé et le résultat est le meme : ça ne fonctionne pas.


Avatar
Seb
"Jean-Marc Bourguet" a écrit dans le message news:

"Seb" writes:

Bonjour,

J'ai dans mon code C++ :

extern "C" void MaFonction(int, int);

Dans un fichier ".c" j'ai le code de cette fonction. Dans mon
makefile, les deux sources sont compilés. Au moment de l'édition de
lien j'ai ceci

undefined reference to 'MaFonction'

Normalement c'est la méthode pour utiliser du C dans du C++, je ne
comprend vraiment pas ce qu'il se passe. Auriez vous une idée.

PS : j'ai essayé au moment de l'édition de lien de changer l'ordre
de mes .o sans succès, et je compile mon fichier .c avec mon
compilateur C++


Es-tu sur qu'il te compile ton fichier .c comme etant du C et non du
C++. Sinon il ne faut pas le extern "C".

A+


J'y ai pensé et j'ai changé le extern "C" en

extern void MaFonction( ...

et

void MaFonction


Et rien n'y fait.


Avatar
Frédéric Gourul
"Seb" a écrit dans le message de
news:bth2lg$p9c$
Je ne pense pas, Le "Stroustrup a un exemple sans les accolades en extern
"C".

J'ai quand meme essayé et le résultat est le meme : ça ne fonctionne pas.


Tu as raison, j'ai dit une connerie. Alors le problème vient peut-être de
ton makefile. Montre la compilation des deux sources et l'édition de lien
pour voir. Il manque peut-être un simple "" à la fin d'une ligne... (ca
m'est arrivé plusieurs fois...)

A+

Avatar
Seb
"Seb" a écrit dans le message news:
bth2q5$pf6$
"Jean-Marc Bourguet" a écrit dans le message news:

"Seb" writes:

Bonjour,

J'ai dans mon code C++ :

extern "C" void MaFonction(int, int);

Dans un fichier ".c" j'ai le code de cette fonction. Dans mon
makefile, les deux sources sont compilés. Au moment de l'édition de
lien j'ai ceci

undefined reference to 'MaFonction'

Normalement c'est la méthode pour utiliser du C dans du C++, je ne
comprend vraiment pas ce qu'il se passe. Auriez vous une idée.

PS : j'ai essayé au moment de l'édition de lien de changer l'ordre
de mes .o sans succès, et je compile mon fichier .c avec mon
compilateur C++


Es-tu sur qu'il te compile ton fichier .c comme etant du C et non du
C++. Sinon il ne faut pas le extern "C".

A+


J'y ai pensé et j'ai changé le extern "C" en

extern void MaFonction( ...

et

void MaFonction


Et rien n'y fait.



Je viens de faire un petit test et effectivement ça ne fonctionne pas si je
compile tout avec g++. Mon erreur est là

Sébastien