2016-12-10 63 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 

我已經檢查過,沒有任何函數的定義兩次,我從不包括.c源文件。 主文件:http://pastebin.com/xr3DF0TE lib.c和lib.h文件:http://pastebin.com/KemhKX3f

這是彙編代碼

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

我與

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: 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.chttp.chttp)到名爲-g一個可執行文件。這是因爲-o之後的參數被認爲是輸出文件名。

錯誤是由於您顯然有一個http可執行文件,它已經包含在httplib.c中定義的(編譯)函數。

修復:

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

非常感謝你的耐心等待!這工作 –