2016-12-10 3 views
-4

У меня возникают проблемы с несколькими определениями функций. Все остальные решения здесь при переполнении стека не сработали для меня.Проблема с файлом заголовка: ошибка множественного определения; сначала определяется здесь

Это моя main.c:

#include "lib.h" 
int main(){ 
    test(); 
} 

Это файл lib.c:

#include "lib.h" 
int var; 
void test(){ 
//code here 
} 

И это файл lib.h:

#ifndef _HTTPLIB_H_ 
#define _HTTPLIB_H_ 
#include <stdio.h> 

extern int var; 

extern void test(); 

#endif 

I проверили и нет никаких определений какой-либо функции дважды, и я никогда не включаю исходный файл .c.

Я компиляции с

gcc lib.c main.c -Wall -g -o main 

main: In function 'test': (.text+0xfdd): multiple definition of 'test' /tmp/ccb8byZi.o:lib.c:(.text+0xef9): first defined here' 

реальный код: главный файл: http://pastebin.com/xr3DF0TE lib.c и lib.h файл: http://pastebin.com/KemhKX3f

Это компиляции кода

gcc -lpthread -D_REENTRANT httplib.c http.c -o -g http 

реальное сообщение об ошибке:

http: In function `sigusr1':(.text+0xfdd): multiple definition of `sigusr1'/tmp/ccb8byZi.o:httplib.c:(.text+0xef9): first defined here 
+3

#include "lib.h" не lib.c – koper89

+0

, которая была опечатка, я не включая lib.c но lib.h –

+0

Что точное сообщение об ошибке? – melpomene

ответ

0
gcc -lpthread -D_REENTRANT httplib.c http.c -o -g http 

Вот ваша проблема: Вы хотите сказать, GCC для компиляции 3 файла (httplib.c, http.c, http) в исполняемый файл под названием -g. Это связано с тем, что аргумент после -o принимается за имя выходного файла.

Ошибки вызваны тем, что вы, по-видимому, находите исполняемый файл http, который уже содержит (скомпилированные) функции, определенные в httplib.c.

Fix:

gcc -lpthread -D_REENTRANT httplib.c http.c -g -o http 
+0

Спасибо большое, спасибо за терпение! Это сработало –

Смежные вопросы