У меня есть проект ILE C на as400, который при линковке выдает мне либо ошибку многократного переопределения глобальных переменных, либо неопределенные ссылки, если я ставлю глобальную переменную extern.
Вот код в самом простом виде:
основной:
#include "Header1"
int main(int argc, char** argv){
int x = Foo();
return 0;
}
Заголовок1
#ifndef HEADER1
#define HEADER1
struct MyStruct{
int x;
};
struct MyStruct g_myStruct; /* My global struct variable. */
int Foo(void);
#endif
Реализация Заголовка1
#include "Header1"
#include "Header2"
int Foo(void){
g_myStruct.x = 432;
return Bar();
}
Заголовок2
#ifndef HEADER2
#define HEADER2
int Bar(void);
#endif
Реализация Заголовка2
#include "Header2"
#include "Header1"
int Bar(void){
return g_myStruct.x;
}
Каждый файл компилируется нормально. Только когда я пытаюсь связать их, я получаю следующую ошибку:
Multiple strong definitions . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
С ключевым словом extern перед объявлением моей глобальной структуры я получаю эту ошибку:
Unresolved references . . . . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
.h
? - person David Ranieri   schedule 10.09.2016g_myStruct.x = 432
, но исправив это, он должен скомпилироваться, можете ли вы показать ошибку? - person David Ranieri   schedule 10.09.2016