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