0

我在写一个内核模块,其中有3个源文件和一个头文件。当我编译它,它让我看到以下错误:错误:多重定义

/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 

我认为这个问题是编译器正在定义struct info更多然后一次。但是,解决方案是什么? struct info在头文件中声明。头文件是如下:

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我解决了它实际上我正在写结构信息的对象....... 。 – karan421 2012-03-28 06:56:58

+0

@torrential编码嗨,我解决了这个问题,通过把外部结构信息inf,但现在它给我下面的警告:警告:“信息”[/home/karan/project/generate.ko] undefined! – karan421 2012-03-28 07:02:25

+0

@OliCharlesworth谢谢,你可能是对的。我意识到我们只是搬出了一些功能,没有任何结构。 – phimuemue 2012-03-28 07:02:40

回答

4

用途:header guards

在你的头做:

#ifndef MYDEFS_H 
#define MYDEFS_H 

struct info { 
    ... 
    ... 
}; 

#endif 
+0

你好我试过了......我正在同样的警告 – karan421 2012-03-28 07:36:42

+0

@ karan421你可以编辑你的问题以包含相关的代码段吗? – 2012-03-28 08:04:50

+0

我已经添加了头文件...如果你需要其他的代码来寻找.....请问它 – karan421 2012-03-28 08:42:39

-1

我想你加入($(USERAPPS主要.c文件): $(USERSP)$(CC)-o $ @)在这里, U包括除主文件这里的所有c文件