Использование команды "extern" в c для совместного использования переменной

У меня есть следующие коды:

(1) extern_test.h:

extern int give_something;

(2) extern_test.c:

#include <stdio.h>
#include "extern_test.h"
int give_something = 10;

(3) extern_test2.c:

#include <stdio.h>
#include "extern_test.h"

int main()
{
    printf("%i\n", give_something);
    return 0;
}

Теперь, когда я компилирую extern_test2.c на терминале, он говорит "неопределенная ссылка на 'give_something'".... Пожалуйста, помогите, почему это не работает..

1 ответ

Решение

"Неопределенная ссылка" означает, что код написан нормально, но как только все различные файлы скомпилированы, и пришло время связать их вместе, один из файлов не имеет то, что вы ищете (в данном случае, give_something). Это называется ошибкой компоновщика.

Скорее всего, проблема в том, что вы не используете правильную командную строку для компилятора - вы пытаетесь скомпилировать extern_test.c а также extern_test2.c на две отдельные двоичные файлы. Таким образом, когда вы компилируете extern_test.c работает нормально, но при попытке скомпилировать extern_test2.c он не может найти переменную, потому что он был объявлен в extern_test.c,

Предполагая, что вы используете g++, используйте эту командную строку:

g++ extern_test.c extern_test2.c

Обратите внимание, как они оба собраны вместе. Есть более интересные команды, которые позволяют вам скомпилировать каждую из них в объектный файл, а затем связать их все вместе после этого с помощью третьей команды, но здесь это не обязательно.

Другие вопросы по тегам