Ошибка: множественное определение - PullRequest
0 голосов
/ 28 марта 2012

Я пишу модуль ядра, в котором у меня есть 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

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Использование: защита заголовка

В вашем заголовке сделайте это:

#ifndef MYDEFS_H
#define MYDEFS_H

struct info {
    ...
    ...
};

#endif
0 голосов
/ 04 июня 2013

Я думаю, что вы добавили основной файл .c в ($ (USERAPPS): $ (USERSP) $ (CC) -o $ @) здесь, У вас есть все c файлы, кроме основного файла здесь

...