2016-12-16 5 views
0

私は3つのファイルを持っています。 main.cの、ファイル.hでFILE.Cファイル.hCのextern clock_t変数がファイル内で期待どおりに動作しません。

は私がメインの実行中のプログラムの時間の長さを保存する機能を書いたFILE.Cに3つの変数

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); 
} 
} 

(メインの先頭)私はstart_t = clock();を書きました。 と終わりには、私はコンパイルすると、すべてのライブラリ(TIME.H、STDLIB.H、すべてのファイルでstdio.hに)

は私がすることで

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) 

エラーリンゴリンカIDエラーを取得含まatexit(savelog) を書きました私の考え方は、時計のカウントとメインの開始を開始し、単に関数内で数学を行うことです。 私の質問は、それはなぜ機能しないのですか?その他の変数clock_tはどのように使用しますか?私はintのいくつかのテストを試してみましたが、うまく参照されているようです。

+0

[完全な自己完結型の例](http://stackoverflow.com/help/mcve)がないと、何が間違っているのか分かりにくいです。それとは別に、 '' b "'と 'fwrite()'をテキストファイルで使うのは珍しいことです。 –

+1

変数は宣言されていますが、定義はありません。 – Barmar

+0

ありがとうBarmar、どうすれば私はそれを見ることができなかったか! –

答えて

0

私は欠けていたものを見つけました。私はmain()を含むファイル内の変数を定義するのを忘れていました(ただし、他のソースファイルでも定義できるのは1つのファイルのみで、そのファイルのオブジェクトコードはプログラムのリンク時にリンクされます)。

関連する問題