【发布时间】:2018-11-22 01:32:13
【问题描述】:
我正在尝试在头文件中创建一个结构,并初始化一个模板结构。出于某种原因,当在多个文件中包含头文件时,它给了我以下错误:
gcc foo.c bar.c -o foo -Wall
duplicate symbol _MYFOO in:
/var/folders/s4/zyw5lgk92wj9ljnsypgwdccr0000gn/T/foo-52f8fc.o
/var/folders/s4/zyw5lgk92wj9ljnsypgwdccr0000gn/T/bar-6dc21f.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这些是我的文件:
Bar.c:
#include "bar.h"
#include <stdio.h>
void helloWorld() {
printf("Hello world\n");
}
Bar.h
typedef struct Foo Foo;
struct Foo {
int number;
} MYFOO = {2};
void helloWorld(void);
Foo.c
#include "bar.h"
int main() {
helloWorld();
}
有趣的是,当我删除包含的行时
MYFOO = {2};
代码可以编译并且运行良好。我相信这与包含 Bar.h 两次有关,最终包含该结构两次?但是我该如何避免这样的事情呢?
谢谢!
【问题讨论】: