头文件问题:多个定义错误;首先在这里定义

时间:2016-12-10 13:26:03

标签: c

我遇到了多个函数定义的问题。堆叠溢出的所有其他解决方案对我来说都没有用。

这是我的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源文件。

我正在编译

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

1 个答案:

答案 0 :(得分: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