J'ai creer un programme sous C contenant :
un fichiersource.c
fonction.c
fonction.h
j'ai ensuite compiler aucun problème, j'ai voulu faire l'édition de lien et la petit message d'erreur :
factcholesky.o: In function `factcholesky':
factcholesky.c:(.text+0x0): multiple definition of `factcholesky'
Maincholesky.o:Maincholesky.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
Pacorabanix
Messages postés3248Date d'inscriptionjeudi 23 août 2007StatutMembreDernière intervention19 mai 2013663 25 févr. 2010 à 14:40
le problème c'est que tu dois faire des include de fichiers croisés.
Alors lorsque le compilateur essaye de tout comprendre, il va repasser plusieurs fois par le même fichier et donc redéfinir plusieurs fois les même choses (d'où l'erreur).
Pense à mettre des "directives de précompilation" qui évitent que le fichier soit lu deux fois.
#pragma once
fonctionne sur de nombreux compilateurs (mais n'est pas standard je crois)
sinon il y a les sentinelles :
monExemple.h :
//commencer le fichier comme ceci
#ifndef MONEXEMPLE_H
#define MONEXEMPLE_H
// reste du code du fichier
// ne sera lu que si la "sentinelle" MONEXEMPLE_H
// n'est pas définie, ceci n'arrive que lors de la première lecture.
#endif
ceci devrait déjà résoudre certains problèmes, j'espère.
A première vue, ton code à l'air bon. Pas de déclaration multiple.
Je pense que tu dois mal compiler/linker ça... Comment fais-tu ?
Attention, il faut compiler/linker QUE fichiersource.c, pas fonction.c !! Car fonction.c est inclus dans fichiersource.c !
Sinon, forcément, tu aura la déclaration multiple.
Ou alors il faudrait enlever l' "#include fonction.c", compiler les deux fichiers c séparément,
Et linker les deux ensemble... Je suis clair?
Pour éviter ce genre de problèmes, à ta place, j'ajouterai ca dans ton fonction.c :
#IFNDEF __FONCTION_FACTCHOLESKY
#DEFINE __FONCTION_FACTCHOLESKY
.... ton code....
#ENDIF
Et pareil dans ton fonction.h :
#IFNDEF __HEADER_FACTCHOLESKY
#DEFINE __HEADER_FACTCHOLESKY
.... ton code....
#ENDIF
Et là, le précompilateur empèchera les déclarations multiples..
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.