Связывание внешних переменных в C - PullRequest
15 голосов
/ 18 мая 2009

В Unix у меня есть три основных файла. Один из них - библиотека, а другой - программа.

  • MyLib.c и MyLib.h - библиотека.
  • main.c - это программа.

В MyLib.h У меня есть объявление (extern int Variable;). Когда я пытаюсь использовать Variable в main.c, я не могу. Конечно, я включил MyLib.h в MyLib.c и main.c, и я тоже связываю их. В любом случае переменная не распознается в main.c.

Как получить доступную переменную при связывании программы?

1 Ответ

31 голосов
/ 18 мая 2009

Variable должно быть определено где-то. Я объявил бы ее как глобальную переменную в MyLib.c, а затем объявил бы ее только как extern в main.c.

Что происходит, так это то, что для MyLib.c и main.c компилятору говорят, что Variable существует и является int, но что-то еще (extern). Это нормально, но тогда это должно быть на самом деле где-то еще, и когда ваш компоновщик пытается связать все файлы вместе, он не может найти Variable на самом деле где-нибудь, поэтому он говорит вам, что он не существует.

Попробуйте это:

MyLib.c:

int Variable;

MyLib.h:

extern int Variable;

main.c:

#include "MyLib.h"

int main(void)
{
    Variable = 10;
    printf("%d\n", Variable);
    return 0;
}
...