我遇到了多个函数定义的问题。堆叠溢出的所有其他解决方案对我来说都没有用。
这是我的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
答案 0 :(得分:0)
gcc -lpthread -D_REENTRANT httplib.c http.c -o -g http
以下是您的问题:您告诉gcc将3个文件(httplib.c
,http.c
,http
)编译成名为-g
的可执行文件。这是因为-o
之后的参数被视为输出文件名。
错误是由您显然有http
可执行文件引起的,该可执行文件已包含httplib.c
中定义的(已编译)函数。
修正:
gcc -lpthread -D_REENTRANT httplib.c http.c -g -o http