C extern clock_t变量在文件中没有按预期工作;

时间:2016-12-16 20:04:33

标签: c linker sharedpreferences clock atexit

所以我有3个档案; main.c,file.c file.h

在file.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.c中我写了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 个答案:

答案 0 :(得分:0)

我发现了我所缺少的东西;我忘了在包含 import sklearn Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> import sklearn ImportError: No module named sklearn 的文件中定义变量(尽管任何其他源文件都可以定义它们,只要只有一个文件定义它们,并且在链接程序时链接该文件的目标代码)