Linker c et c++ sous dev c++
nicolas
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je veux realiser un réseau en c++ sous dev c++.
pour le faire, je veux utiliser la bibliotheque net2, qui derive de SDL_net.
le probleme c'est que ce n'est pas un billiothèque avec des .dll .lib et .h
elle est ecrite en c, a partir de SDL_net.
Je voudrais savoir comment appeler les fonctions de NET2.h dans mon programme en c++!
j'ai voulu passer les .c en .cpp mais il y a de multiple erreurs dues a des conversions de format.
J'ai contacter le créateur de la bibliothèque qui m'a di qu'il suffit de linker c et c++ ...
la bibliothèque compile bien et fonctionne en c deja chez moi
Pouvez vous m'aider car je ne vois pas comment le faire!
merci!
je veux realiser un réseau en c++ sous dev c++.
pour le faire, je veux utiliser la bibliotheque net2, qui derive de SDL_net.
le probleme c'est que ce n'est pas un billiothèque avec des .dll .lib et .h
elle est ecrite en c, a partir de SDL_net.
Je voudrais savoir comment appeler les fonctions de NET2.h dans mon programme en c++!
j'ai voulu passer les .c en .cpp mais il y a de multiple erreurs dues a des conversions de format.
J'ai contacter le créateur de la bibliothèque qui m'a di qu'il suffit de linker c et c++ ...
la bibliothèque compile bien et fonctionne en c deja chez moi
Pouvez vous m'aider car je ne vois pas comment le faire!
merci!
A voir également:
- C++ linker
- Photo linker - Télécharger - Photo & Graphisme
- Problème de sauvegarde avec DS LINKER - Forum Jeux vidéo
- [Nintendo DS] Linker ? Rom ? GBA ? - Forum Jeux vidéo
- Ds linker file write error - Forum Jeux vidéo
- Linker DS "Fire Link" compatible sur DSi - Forum DS
3 réponses
Ce que tu dit est peux clair...
Pour lier du C et du C++, il faut rajouter un extern "C" devant toute les fonction C appelées en C++.
Cela se fait assez simplement en modifiant les .h en incluant au début :
Pour lier du C et du C++, il faut rajouter un extern "C" devant toute les fonction C appelées en C++.
Cela se fait assez simplement en modifiant les .h en incluant au début :
#ifdef _cplusplus extern "C"{ #endifet à la fin
#ifdef _cplusplus } #endifVoila, tiens nous au courant de si ça a fonctionner.
1) Au niveau des includes il faut rajouter le chemin des headers de net2 avec les options -I ou -isystem. Par exemple s'ils sont dans /plop/include :
2) A la compilation de ton exécutable (mais pas de tes modules),phase dite de linkage :
Pour indiquer au compilateur ou trouver les binaires des librairies (.a ou .so) rajoute les options -L et -Wl,R. Par exemple s'ils sont dans /plop/lib :
Ensuite :
- avec une librairie .a : en plus de tes .o il faut passer le(s) .a
- avec une librarie .so : il faut utiliser les options -l. Par exemple pour libplop.so passer
Donne-nous le chemin de ton .so/.a et de tes .h pour qu'on te donne la ligne de compilation exacte.
Bonne chance
-I/plop/include
2) A la compilation de ton exécutable (mais pas de tes modules),phase dite de linkage :
Pour indiquer au compilateur ou trouver les binaires des librairies (.a ou .so) rajoute les options -L et -Wl,R. Par exemple s'ils sont dans /plop/lib :
-L/plop/lib -Wl,-R/plop/lib
Ensuite :
- avec une librairie .a : en plus de tes .o il faut passer le(s) .a
- avec une librarie .so : il faut utiliser les options -l. Par exemple pour libplop.so passer
-lplop
Donne-nous le chemin de ton .so/.a et de tes .h pour qu'on te donne la ligne de compilation exacte.
Bonne chance
Il n'y a pas de raison que ça ne fonctionne pas. Tu doit faie quelque chose de travers.
déjà un peu de théorie :
Quel est le problème de compatiilité entre C et C++ ?
prenons la déclaration d'une fonction simple : int fct(int,double); en C le nom de la fonction sera compiler en assembleur quelque chose du genre : _fct_ alors qu'en C++ ce sera quelque chose du genre _fct_id
le C++ "enjolive" le nom de la fonction en assembleur afin de permettre la surcharge des fonctions (en C++ il est alors possible de déclarer int fct(int); qui sera une fonction différente).
Alors comment appeler une fonction C au sein d'un programme C++ ?
Pour dire à C++ que la fonction déclarée est écrite en C, et que lors de la compilation le nom ne doit pas être décoré, il faut le préciser explicitement au compilateur avec la commande :
extern "C" {int fct(int,double);}
Comment vérifier que les noms sont bien compatible ?
Lorsque tu as tes .o de toutes tes sources, tu peux regarder les nom des fonctions avec nm
nm plop.o t'affichera tout les symboles (fonctions et variables) définis dans plop.o.
déjà un peu de théorie :
Quel est le problème de compatiilité entre C et C++ ?
prenons la déclaration d'une fonction simple : int fct(int,double); en C le nom de la fonction sera compiler en assembleur quelque chose du genre : _fct_ alors qu'en C++ ce sera quelque chose du genre _fct_id
le C++ "enjolive" le nom de la fonction en assembleur afin de permettre la surcharge des fonctions (en C++ il est alors possible de déclarer int fct(int); qui sera une fonction différente).
Alors comment appeler une fonction C au sein d'un programme C++ ?
Pour dire à C++ que la fonction déclarée est écrite en C, et que lors de la compilation le nom ne doit pas être décoré, il faut le préciser explicitement au compilateur avec la commande :
extern "C" {int fct(int,double);}
Comment vérifier que les noms sont bien compatible ?
Lorsque tu as tes .o de toutes tes sources, tu peux regarder les nom des fonctions avec nm
nm plop.o t'affichera tout les symboles (fonctions et variables) définis dans plop.o.
par lier, tu veux dire utiliser des fonctions en c dans un projet en c++?
pcq j'avais bien rajouté ces lignes de code mais je ne sais pas a quoi ca sert je n'ai pas encore regardé sur internet.
le truc c'est que j'ai des fonctions .h et .c, je peux les compiler.
je voudrais utiliser les fonctions créés dans un projet c++.
ajouter dans les options du projet des liens vers les .o des fonctions compilées en c devrai suffire mais ca ne marche pas.
biensur, j'appelle les .h des fonctions en .c dans le projet c++ et je pense que le probleme vient de la.