0

J'écris un module noyau dans lequel j'ai 3 fichiers source et un fichier d'en-tête. Quand je compile, il me montre l'erreur suivante:Erreur: définition multiple

/home/karan/project/proc.o: In function `proc_read': 
/home/karan/project/proc.c:23: multiple definition of `info' 
/home/karan/project/main.o:/home/karan/project/main.c:23: first defined here 
/home/karan/project/tx_pkt.o: In function `tx_packet': 
/home/karan/project/tx_pkt.c:9: multiple definition of `info' 
/home/karan/project/main.o:/home/karan/project/main.c:23: first defined here 

Je pense que le problème est que le compilateur prend définition struct info plus d'une fois. Mais quelle est la solution? Le struct info est déclaré dans le fichier d'en-tête. Le fichier d'en-tête est la suivante:

int proc_write(struct file *filp,const char *buffer,unsigned long count,void *data); 
int proc_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int *eof,void *data); 
void tx_packet(void); 

#ifndef MYDEFS_H 
#define MYDEFS_H 


struct inform 
{ 
char tx_buffer[100]; 
struct iphdr *ip1; 
}; 


extern struct inform info; 


#endif 
+0

@phimuemue Je l'ai résolu en fait j'écrivais l'objet de struct info là ....... – karan421

+0

codage @torrential salut j'ai résolu le problème en mettant extern info de structure inf mais maintenant il me donne avertissement suivant: AVERTISSEMENT: "info" [/home/karan/project/generate.ko] undefined! – karan421

+0

@OliCharlesworth Merci, vous avez probablement raison. J'ai réalisé que nous n'avions que quelques fonctions, pas de structure. – phimuemue

Répondre

4

Utilisation: header guards

Dans votre tête ce faire:

#ifndef MYDEFS_H 
#define MYDEFS_H 

struct info { 
    ... 
    ... 
}; 

#endif 
+0

yeh je l'ai essayé ... Je reçois le même avertissement – karan421

+0

@ karan421 Pouvez-vous modifier votre question pour inclure les sections pertinentes du code? –

+0

J'ai ajouté le fichier d'en-tête ... si vous voulez un autre code pour chercher ..... demandez-le – karan421

-1

Je pense que Vous avez ajouté le fichier principal .c dans ($ (USERAPPS): $ (USERSP) $ (CC) -o $ @) ici, U inclure tout fichier c sauf le fichier principal ici

Questions connexes