Compilation de fichier ; GROS PB POUR MON STAGE !!
loulou
-
char snipeur -
char snipeur -
J'ai déclaré des variables globales dans le fichier .h de mon projet, et le compilateur sort l'erreur suivante :
"error LNK2005: _AdrBuff already defined in main.obj", (AdrBuff est ma variable global).
Le fichier .h est inclu dans le main.c, et bizarement je suis obligé de l'inclure dans ma fonction pour que mon programme fonctionne.
De quoi peut provenir cette erreur ?
Il semble que la porté de ma variable ne soit pas réèllement global, ou que sa déclaration soit redondante du fait que le .h soit inclu dans le main et dans la fonction.
Merci.
"error LNK2005: _AdrBuff already defined in main.obj", (AdrBuff est ma variable global).
Le fichier .h est inclu dans le main.c, et bizarement je suis obligé de l'inclure dans ma fonction pour que mon programme fonctionne.
De quoi peut provenir cette erreur ?
Il semble que la porté de ma variable ne soit pas réèllement global, ou que sa déclaration soit redondante du fait que le .h soit inclu dans le main et dans la fonction.
Merci.
A voir également:
- Compilation de fichier ; GROS PB POUR MON STAGE !!
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
9 réponses
Tu viens de donner le pb...
Ca n'a rien de bizarre : c'est comme si tu définissais plusieurs fois la meme fonction...
Plusieurs solutions à ton pb :
1) c'est une constante, rajoute alors simplement static devant et ça va marcher. Seulement après ATTENTION ce ne sera pas la meme variable partout (j'ai un léger doute à ce sujet, j'essaie de vérifier ce soir)
2) tu ne la déclares pas dans le .h, mais dans le main par exemple et dans tous les modules .c où tu veux utiliser CETTE variable tu fais un copier-coller de la déclaration en haut du prog et tu rajoute extern devant...
Voilà, ça devrait aller
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Ca n'a rien de bizarre : c'est comme si tu définissais plusieurs fois la meme fonction...
Plusieurs solutions à ton pb :
1) c'est une constante, rajoute alors simplement static devant et ça va marcher. Seulement après ATTENTION ce ne sera pas la meme variable partout (j'ai un léger doute à ce sujet, j'essaie de vérifier ce soir)
2) tu ne la déclares pas dans le .h, mais dans le main par exemple et dans tous les modules .c où tu veux utiliser CETTE variable tu fais un copier-coller de la déclaration en haut du prog et tu rajoute extern devant...
Voilà, ça devrait aller
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
J'ai fais la modif 2) avant de mettre mon message, et je l'ai recommencée...mais le problème demeure !!!
dépose tes sources là :
www.softcrypt.fr.st
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
www.softcrypt.fr.st
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suis en train de jeter un coup d'oeil :
Ca c'est dans ton .h, et ça ne peut pas y être tel quel, parce que sinon les MEMES variables vont être définies plusieurs dans plusieurs modules objets différents => ça passe à la compil, ça casse au linkage où le linker va te dire qu'un symbole est défini dans plusieurs endroits...
Donc je me répète :
Comme il semble que tu veuilles utiliser ces variables au cours de l'éxécution (ptit rappel qd même : les variables sont à éviter au maximum)...
Tu vas donc me déplacer ces lignes dans le main.c (ou dans n'importe lequel de tes modules d'ailleurs...), et partout ailleurs où tu voudras les utiliser, ton compilo aura besoin de connaitre la déclaration de tes variables, tu écriras :
Comme ça, la compil passera et le linker comprendra que ces variables sont définies ailleurs. Tu pourras d'ailleurs vérifier que si tu commentes les définitions et que tu ne laisses que les déclarations (extern), le linlker génèrera une erreur...
J'espère avoir été clair...
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
//VARIABLES GLOBALES
char NumMag[10], AdrBuff[][200] = {"","","",""}, *Argu[];
int NbArgc;
//int argc;
Ca c'est dans ton .h, et ça ne peut pas y être tel quel, parce que sinon les MEMES variables vont être définies plusieurs dans plusieurs modules objets différents => ça passe à la compil, ça casse au linkage où le linker va te dire qu'un symbole est défini dans plusieurs endroits...
Donc je me répète :
Comme il semble que tu veuilles utiliser ces variables au cours de l'éxécution (ptit rappel qd même : les variables sont à éviter au maximum)...
Tu vas donc me déplacer ces lignes dans le main.c (ou dans n'importe lequel de tes modules d'ailleurs...), et partout ailleurs où tu voudras les utiliser, ton compilo aura besoin de connaitre la déclaration de tes variables, tu écriras :
//VARIABLES GLOBALES
extern char NumMag[10];
extern char AdrBuff[][200] = {"","","",""}, *Argu[];
extern int NbArgc;
//int argc;
Comme ça, la compil passera et le linker comprendra que ces variables sont définies ailleurs. Tu pourras d'ailleurs vérifier que si tu commentes les définitions et que tu ne laisses que les déclarations (extern), le linlker génèrera une erreur...
J'espère avoir été clair...
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
linker pas linlker ;-p
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
T'es un peu chiant, non ? :-)
Tu as traqué les conneries que je pouvais dire et comme tu n'as rien trouvé d'autre, c ça ? ;-)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Tu as traqué les conneries que je pouvais dire et comme tu n'as rien trouvé d'autre, c ça ? ;-)
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?