前提・実現したいこと
CPUクロックに基づく相対時刻の計測に掲載されている
「Linux OS/GNU CコンパイラでのRDTSC命令」のプログラムを実行しようとしています。
発生している問題・エラーメッセージ
コンパイル時に以下のエラーが出たのですが、どのように修正するべきか検討がつきません。
$ gcc -o measurement measurement.c measurement.c:7:5: warning: implicit declaration of function 'to_be_measured' is invalid in C99 [-Wimplicit-function-declaration] to_be_measured(); ^ measurement.c:9:30: warning: length modifier 'I64' results in undefined behavior or no effect with 'd' conversion specifier [-Wformat] printf("measured time : %I64d [clock]\n", stop - start); ~^~~~ 2 warnings generated. Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable "_rdtsc", referenced from: _measure_func in measurement-503114.o "_to_be_measured", referenced from: _measure_func in measurement-503114.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
該当のソースコード
rdtsc.h
c
1#ifndef RDTSC_H_ 2#define RDTSC_H_ 3 4inline unsigned long long rdtsc() { 5 unsigned long long ret; 6 __asm__ volatile ("rdtsc" : "=A" (ret)); 7 return ret; 8} 9 10#endif /* RDTSC_H_ */
measurement.c
c
1#include "rdtsc.h" 2#include <stdio.h> 3 4int measure_func() 5{ 6 unsigned long long start = rdtsc(); 7 to_be_measured(); 8 unsigned long long stop = rdtsc(); 9 printf("measured time : %I64d [clock]\n", stop - start); 10 11 return 0; 12}
補足情報(FW/ツールのバージョンなど)
ターミナル2.9.5
###ご回答を受けて修正したプログラムと実行結果
出力結果がよりわからなくなったのですが、どのように修正していくべきでしょうか。
measurement.c
c
1#include <stdio.h> 2#include "rdtsc.h" %<>にすると「 'rdtsc.h' file not found with <angled> include; use "quotes" instead」というerrorが表示されました 3 4int main(void){ 5 unsigned long long start = rdtsc(); 6 to_be_measured(); 7 unsigned long long stop = rdtsc(); 8 printf("measured time : %I64d [clock]\n", stop - start); 9 10 return 0; 11}
出力
$ gcc -o measurement measurement.c measurement.c:6:5: warning: implicit declaration of function 'to_be_measured' is invalid in C99 [-Wimplicit-function-declaration] to_be_measured(); ^ measurement.c:8:30: warning: length modifier 'I64' results in undefined behavior or no effect with 'd' conversion specifier [-Wformat] printf("measured time : %I64d [clock]\n", stop - start); ~^~~~ 2 warnings generated. Undefined symbols for architecture x86_64: "_rdtsc", referenced from: _main in measurement-7e629d.o "_to_be_measured", referenced from: _main in measurement-7e629d.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。