Связывание внешних переменных в C

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

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

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

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

Ответы

Ответ 1

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