错误:多重定义

Posted

技术标签:

【中文标题】错误:多重定义【英文标题】:Error : multiple definition 【发布时间】:2012-03-28 06:44:08 【问题描述】:

我正在编写一个内核模块,其中有 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

【问题讨论】:

@phimuemue 我解决了实际上我在那里写了 struct info 的对象........ @torrential coding 嗨,我通过放置 extern struct info inf 解决了这个问题,但现在它给了我以下警告:WARNING: "info" [/home/karan/project/generate.ko] undefined! @OliCharlesworth 谢谢,你可能是对的。我意识到我们只是移出了一些函数,没有结构。 @karan421 您是否尝试过我回答中的建议? 【参考方案1】:

使用:header guards

在你的标题中这样做:

#ifndef MYDEFS_H
#define MYDEFS_H

struct info 
    ...
    ...
;

#endif

【讨论】:

@karan421 你能编辑你的问题以包含相关的代码部分吗? 我已经添加了头文件......如果你想要任何其他代码来寻找......请索取 @karan421 为什么要为info 添加extern 声明?它现在正试图在别处寻找info 的定义,因此发出警告。【参考方案2】:

我认为您在 ($(USERAPPS): $(USERSP) $(CC) -o $@ ) 中添加了主 .c 文件, u 在这里包含除主文件以外的所有c文件

【讨论】:

以上是关于错误:多重定义的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel Auth 中自定义重定向

spring-retry实现方法请求重试

python自定义重试装饰器

来自 AuthorizationHandler (ASP.NET Core) 的自定义重定向

构建错误:多重定义

WooCommerce 中特定产品的基于地理位置的自定义重定向