Заголовочный файл и ключевое слово extern

У меня много проблем с использованием переменных переменных и заголовочных файлов. Я прочитал разделы книг и искал в Интернете в течение нескольких часов, но я не смог понять. Любая помощь в понимании этой проблемы будет принята с благодарностью. Ниже приведен код и ошибка, когда я пытаюсь скомпилировать

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

И образец.h является следующим

      #ifndef SAMPLE
      #define SAMPLE

      extern int gI;
      extern double AnotherFunc(); 

      #endif

А другой это функция

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

Когда я компилирую следующим образом, я получаю следующие ошибки, которые я не понимаю, почему я получаю эти ошибки. У sample.h есть объявление переменной, и оно должно быть видно в 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

Я только добавил int gI = 0; потому что я хотел определить это. Если я изменяю код следующим образом, я получаю ошибку в основном. Пожалуйста, смотрите ниже.

           #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

Ответы на вопрос(5)

Ваш ответ на вопрос