Ich habe ein ILE C Projekt auf dem as400 welches, wenn es verbunden wird, mir entweder einen Fehler der mehrfachen Neudefinition von globalen Variablen oder undefinierten Verweisen gibt, wenn ich die globale Variable extern setze.as400 ILE C globale Variable mehrfache Neudefinition
Hier ist der Code in seiner einfachsten Form:
Haupt:
#include "Header1"
int main(int argc, char** argv){
int x = Foo();
return 0;
}
Header1
#ifndef HEADER1
#define HEADER1
struct MyStruct{
int x;
};
struct MyStruct g_myStruct; /* My global struct variable. */
int Foo(void);
#endif
Header1 Implementierung
#include "Header1"
#include "Header2"
int Foo(void){
g_myStruct.x = 432;
return Bar();
}
Header2
#ifndef HEADER2
#define HEADER2
int Bar(void);
#endif
Header2 Implementierung
#include "Header2"
#include "Header1"
int Bar(void){
return g_myStruct.x;
}
Jede Datei kompiliert in Ordnung. Nur wenn ich versuche, sie mir folgende Fehlermeldung erhalten zu verknüpfen:
Multiple strong definitions . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
Mit dem Schlüsselwort extern vor meiner globalen Strukturdeklaration, bekomme ich diesen Fehler:
Unresolved references . . . . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
Warum enden Ihre Header nicht mit '.h'? –
Sie vergessen auch das Semikolon in der Header1-Implementierung: 'g_myStruct.x = 432', aber das reparieren muss es kompilieren, können Sie den Fehler anzeigen? –
@AlterMann Es gibt kein .h im as400 QSYS-Dateisystem. –