|
|
|
|
GafouZ, le jeudi 22 mars 2007 à 10:11:44Configuration: Linux Mandriva Firefox 1.5.0.7
Salut,
Je pense qu'il faut que tu inclues ton Robulab.cpp dans ton ServeurTCP9988.o. Si jamais ça te met des erreurs de redéfinition, tu peux créer un Robulab.h contenant tous les prototypes des fonctions de Robulab.c et mettre un #ifndef avec #include "Robulab.h" dans ton ServeurTCP9988.c. Oublie pas le -lpthread pour le multithread ^^ |
J'ai essayé d'inclure Robulab.c dans serveur.o mais il me dit encre des erreurs de redéfinition...
C'est quoi exactement ces erreurs là? Et pourquoi le "#ifndef" ? Le truc c'est que j'ai seulment 1 classe avec 4/5 fonctions, à coté de cela j'ai 3 fonctions et 2 structures et il me faut que tout cela soit dans le même .h!! Donc refaire un Robulab.h euh.... Ah Oui le "-lpthread" je ne l'ai pas encore mis car je ne gère pas le multithreading ! J'ai mis toute cette partie en commentaire justement car elle n'est pas fini ! Maintenant j'obtient: $ make g++ -o RobuSimul.o -c RobuSimul.cpp -Wall -ansi g++ -o Robulab.o -c Robulab.cpp -Wall -ansi g++ -o ServeurTCP9988.o ServeurTCP9988.cpp Robulab.cpp /home/bryc/tmp/ccYL0HHS.o: In function `main': Robulab.cpp:(.text+0x40): undefined reference to `RobuSimul::RobuInit(Coordonnees&)' Robulab.cpp:(.text+0xd7): undefined reference to `RobuSimul::EnAvantRobuLab(LAB80FeedbackStruct&, RobuSimul&, Coordonnees)' Robulab.cpp:(.text+0xdc): undefined reference to `ServeurTCP9988()' Robulab.cpp:(.text+0xe6): undefined reference to `ClientTCP()' collect2: ld returned 1 exit status make: *** [ServeurTCP9988.o] Erreur 1 Merci de ton aide ! |
En fait les erreurs de redéfinition sont 'normales' dans la mesure où deux .c vont s'appeler l'un l'autre. C'est pourquoi un #ifndef est utile. En gros ça ferait ici : if not define so include, c'est pourquoi je t'avais proposé un .h ne contenant que les prototypes des fonctions du .c de ton main (tu peux le faire dans l'autre sens aussi). En pratique tu peux faire :
Si tu as un #define dans ton programme, utilise le comme test, sinon tu en crées un pour le test ^^ #ifndef CONSTANTE_TEST #include ton_fichier.h #endifSi ta constante n'est pas définie, alors il va include ton .h avec les prototypes et ça sera bon, sinon il ne fera rien. Ca te permet d'éviter les redéfinitions. |
RE:
J'essayerai ce soir et je vous tiendrais au courant! Là je suis obliger d'aller en cour ! Merci pour tout ! Bonne journée ! |
à mon avis, il manque simlpement l'option -c à la dernière compilation, d'où l'erreur de ld qui n'aurai même pas du être appeler à ce niveau là.
Salutation !
Char Snipeur |
re, j'avais pas lu le reste.
Reviens au premier message, il suffisait de rajouter le "-c". Maintenant, tu n'as pas de problème de redéfinition, tu a un problème de définition : "undefined reference" veux dire que ta fonction n'est pas défini, qu'il ne la trouve pas, qu'elle n'existe pas. Encore une foi, c'est un problème à l'édition des liens, pas à la compilation, donc rien ne sert de tripatouiller les .h Salutation ! Char Snipeur |
Pourquoi ne pas s'inspirer d'un makefile générique qui t'éviterait d'avoir à écrire les dépendances à la main ?
http://www.apc.univ-paris7.fr/~beau/article.php3?id_article=36 A noter qu'on inclu JAMAIS un fichier de source (.cpp, .c, .cc, .cxx...). Les seules chose que tu peux inclure sont les headers (.hpp, .h, .hh, .hxx...) et les définitions de templates (.tcc). A noter que si tu implémentes (au lieu de seulement déclarer) une fonction dans un header, celle-ci doit impérativement être inline (sinon tu risques d'avoir des redefinitions si ce fichier est inclu à plusieurs endroits). Bonne chance |
Merci à vous!
J'ai resolu le problème ! Comme vous le dites Char Snipeur j'avais tout simplement oublier le -c et ca a peut près marché ! En fin de compte j'ai fini par faire un .cpp = un .h cela m'a simplifer le tout ! Merci mamiemando je vais re regarder cela de plus près. Merci encore ! J'ai d'autres problèmes mais je ne les posterai pas ici parce qu'ils ne consernent en rien ce sujet ! Bne soirée! |
| 07/09 16h06 | Monter un répertoire commun Linux/Windows sur un serveur | Mozilla Thunderbird |
| 02/01 12h30 | [Linux] Installation d'un scanner USB sous Mandrake 10.1 | Matériel/Périphériques |
| 23/05 21h09 | [Linux] Débuter sous Linux | Linux |
| 23/12 09h47 | Périphériques sous Linux | Matériel/Périphériques |
| 15/03 20h08 | Connexion à une base Ingres avec PHP | Ingres |
| 19/04 15h50 | Corrigé pour exos physique/chimie niveau BTS | 0 |
| 20/08 14h14 | Clavier HS au niveau du BIOS - Ok sous Linux | 2 |
| 06/08 13h28 | Commande linux | 8 |
![]() | CHAOS Shredder - CHAOS Shredder permet de supprimer de façon permanente des fichiers ou dossiers spécifiques, le contenu de la corbeille, les... | Catégorie: Anonymat/Confidentialité Licence: Freeware/gratuit |
![]() | K-Lite Codec Pack Full - K-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo.... | Catégorie: Codecs Licence: Open Source |
![]() | K-Lite Codec Pack Standard - K-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo.... | Catégorie: Codecs Licence: Open Source |
![]() | Crystal Clear - Crystal Clear est changera entièrement l'apparence de votre Windows XP en modifiant les fichiers système. Le pack... | Catégorie: Personnalisation Licence: Freeware/gratuit |
![]() | Cherry G86-21070 CyMotionMaster Linux | Catégorie: Clavier | |
![]() | Acer Power F6 Celeron | Catégorie: Ordinateur de bureau | 294.89 € MicroChoix |
![]() | Acer Aspire FV Celeron | Catégorie: Ordinateur de bureau | |
![]() | Surcouf J331 Linux Ubuntu | Catégorie: Ordinateur de bureau |