【发布时间】:2011-12-27 20:40:41
【问题描述】:
我有 2 个模块(.c 文件)和一个 .h 头文件:
file1.c:
#include <stdio.h>
#include "global.h"
int main()
{
i = 100;
printf("%d\n",i);
foo();
return 0;
}
file2.c
#include <stdio.h>
#include "global.h"
void foo()
{
i = 10;
printf("%d\n",i);
}
global.h
int i;
extern void foo()
当我执行 gcc file1.c file2.c 时,一切正常,我得到了预期的输出。现在,当我在头文件中将变量“i”初始化为 0 并再次编译时,我得到一个链接器错误:
/tmp/cc0oj7yA.o:(.bss+0x0): multiple definition of `i'
/tmp/cckd7TTI.o:(.bss+0x0): first defined here
如果我只是编译 file1.c(删除对 foo() 的调用)并在头文件中初始化,即 gcc file1.c,一切正常。怎么回事?
【问题讨论】:
标签: c