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

+0

@torrential coding Привет, я решил проблему, поставив extern struct info inf, но теперь он дал мне следующее предупреждение: ПРЕДУПРЕЖДЕНИЕ: «info» [/home/karan/project/generate.ko] undefined! – karan421

+0

@OliCharlesworth Спасибо, ты, наверное, прав. Я понял, что мы сделали только некоторые функции, никаких структур. – phimuemue

ответ

4

Использование: header guards

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

#ifndef MYDEFS_H 
#define MYDEFS_H 

struct info { 
    ... 
    ... 
}; 

#endif 
+0

yeh Я попробовал ... Я получаю такое же предупреждение – karan421

+0

@ karan421 Можете ли вы изменить свой вопрос, чтобы включить соответствующие разделы кода? –

+0

Я добавил файл заголовка ... если вы хотите, чтобы какой-либо другой код выглядел ..... спросите его – karan421

-1

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