Использование команды "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
Обратите внимание, как они оба собраны вместе. Есть более интересные команды, которые позволяют вам скомпилировать каждую из них в объектный файл, а затем связать их все вместе после этого с помощью третьей команды, но здесь это не обязательно.