У меня есть 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, все работает нормально. Что происходит?