Header-Datei und externes Schlüsselwort
Ich habe eine Menge Probleme mit externen Variablen und Header-Dateien. Ich habe Abschnitte in Büchern gelesen und stundenlang im Internet gesucht, aber ich konnte es nicht herausfinden. Jede Hilfe zum Verständnis dieses Problems wird sehr geschätzt. Das Folgende ist der Code und der Fehler, wenn ich versuche zu kompilieren
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sample.h"
int main()
{
int i;
int gI = 0;
double recv;
i = 10;
gI = i;
recv = AnotherFunc();
return 0;
}
Und die sample.h ist die folgende
#ifndef SAMPLE
#define SAMPLE
extern int gI;
extern double AnotherFunc();
#endif
Und das andere ist die Funktion
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sample.h"
double AnotherFunc()
{
double someVar;
int test;
test = gI;
someVar = 10.0;
return someVar;
}
Wenn ich folgendermaßen kompiliere, erhalte ich die folgenden Fehler, die ich nicht verstehe, warum ich diese Fehler erhalte. sample.h hat die Variablendeklaration und sollte in AnotherFunc sichtbar sein.
gcc -Wall -ansi -pedantic -c Main.c AnotherFunc.c
gcc Main.o AnotherFunc.o -o test
AnotherFunc.o: In function `AnotherFunc':
AnotherFunc.c:(.text+0x6): undefined reference to `gI'
collect2: ld returned 1 exit status
Ich habe nur den int gI = 0 hinzugefügt; weil ich es definieren wollte. Wenn ich den Code wie folgt ändere, erhalte ich auch eine Fehlermeldung in main. Siehe unten.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sample.h"
int main(int argc, char *argv[])
{
int i;
double recv;
i = 10;
gI = i;
recv = AnotherFunc();
return 0;
}
gcc -Wall -Wstrict-prototypes -ansi -pedantic -c Main.c AnotherFunc.c
gcc Main.o AnotherFunc.o -o test
Main.o: In function `main':
Main.c:(.text+0x1b): undefined reference to `gI'
AnotherFunc.o: In function `AnotherFunc':
AnotherFunc.c:(.text+0x6): undefined reference to `gI'
collect2: ld returned 1 exit status