2016-12-16 5 views
0

그래서 3 개의 파일이 있습니다. main.c를, file.c는의 file.h file.h에서C extern clock_t 변수가 파일에서 예상대로 작동하지 않습니다.

나는 3 개 변수

file.c는에
extern clock_t start_t, end_t, total_t; 

내가 주요 실행중인 프로그램의 시간을 저장하는 함수를 썼다 선언; 및 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_t start_t = clock(); 마지막에 및 atexit(savelog) 내가 (모든 파일 time.h, stdlib.h, STDIO.H) 모든 라이브러리를 포함 썼다

나는 오류 사과 링커 ID 오류

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의 몇 가지 테스트를 시도하고 잘 보이는 것 같았다.

+0

[완전한 자체 포함 예] (http://stackoverflow.com/help/mcve) 없이는 무엇이 잘못되었는지 쉽게 알 수 없습니다. 옆으로 :''b "'모드와'fwrite()'를 텍스트 파일과 함께 사용하는 것은 드문 일입니다. –

+1

변수 선언이 있지만 정의가 없습니다. – Barmar

+0

감사합니다. Barmar, 어떻게 볼 수 없습니까? –

답변

0

제가 누락 된 부분을 발견했습니다. main()을 포함하는 파일에서 변수를 정의하는 것을 잊었습니다. 그러나 다른 소스 파일은 하나의 파일 만 정의하고 해당 파일의 오브젝트 코드는 프로그램이 링크 될 때 링크되어있는 한 다른 소스 파일에서 정의 할 수 있습니다.