C extern clock_t переменные не работают должным образом в файле;

Итак, у меня 3 файла; main.c, file.c file.h

в файле.h я объявил 3 переменные

extern  clock_t start_t, end_t, total_t;

в file.c я написал функцию для сохранения продолжительности основной работающей программы; и в file.h я ссылаюсь на него как "void saveLog(void);"

void saveLog(void)
{   
end_t = clock();
total_t = (end_t - start_t);
double time_spent = (double) total_t / CLOCKS_PER_SEC;

double *arr = malloc(sizeof(double));
*arr = time_spent;

FILE* fp = fopen("log.txt","wb");
if (fp)
{
    printf("Elapsed: %f seconds\n", (double) time_spent);
    fwrite(arr, 1, sizeof(double), fp);
    fclose(fp);
}
}

в main.c в начале main я написал start_t = clock(); и в конце написал atexit(savelog)Я включил все библиотеки (time.h, stdlib.h, stdio.h во все файлы)

При компиляции я получаю сообщение об ошибке apple linker id error

Undefined symbols for architecture x86_64:
  "_end_t", referenced from:
      _saveLog in file.o
  "_start_t", referenced from:
      _check_answer in main.o
      _saveLog in file.o
  "_total_t", referenced from:
      _saveLog in file.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Кстати, я думаю, чтобы начать отсчет часов и начало основного и просто сделать математику в функции. У меня вопрос, почему это не работает? Как еще я должен использовать clock_t переменные? Я попытался провести некоторое тестирование с помощью int, и, похоже, на него ссылались просто отлично.

1 ответ

Я узнал, чего мне не хватало; Я забыл определить переменные в файле, который содержит main() (хотя любой другой исходный файл мог бы определить их вместо этого, если только один файл определяет их, и объектный код для этого файла связан, когда программа связана).

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