Arquivo de cabeçalho e palavra-chave externa

Estou tendo muitos problemas ao usar arquivos de variáveis e cabeçalho externos. Eu li seções de livros e procurei na web por horas, mas não consegui descobrir. Qualquer ajuda para entender esse problema será muito apreciada. A seguir, estão o código e o erro quando tento compilar

    #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;
      }

E o sample.h é o seguinte

      #ifndef SAMPLE
      #define SAMPLE

      extern int gI;
      extern double AnotherFunc(); 

      #endif

E a outra é função é

       #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;
         }

Ao compilar da seguinte maneira, recebo os seguintes erros que não entendo por que estou recebendo esses erros. sample.h possui a declaração de variável e deve estar visível no AnotherFunc.

          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

Eu apenas adicionei o int gI = 0; porque eu queria defini-lo. Se eu modificar o código da seguinte maneira, também recebo erro no main. Por favor veja abaixo.

           #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

questionAnswers(5)

yourAnswerToTheQuestion