はじめに
このサイトを参考に表題のタイマーを実装しようとしました.
本記事は表題の視点からの実装の記録です.
#コード
元記事をコピペすると以下のようになります.
コードはこれで問題ないです.
a.c
// mmsystem.hだけ追加すれば良いと思いがちですがWindows.hが必要です.
// また,Windows.hの後にmmsystem.hを入れないとエラーが起こります.
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <mmsystem.h>
double start_t=0, end_t=0;
int main(int argc, char const *argv[])
{
/* code */
start_t=timeGetTime();
sleep(1);
end_t=timeGetTime();
printf("%f[msec]",end_t-start_t);
return 0;
}
#コンパイル(失敗)
学校で習った通り,
>gcc a.c
と,コンパイルすると,
C:\Users\hoge\AppData\Local\Temp\ccibNftU.o:b.c:(.text+0x1b): undefined reference to `timeGetTime@0'
C:\Users\hoge\AppData\Local\Temp\ccibNftU.o:b.c:(.text+0x56): undefined reference to `timeGetTime@0'
collect2.exe: error: ld returned 1 exit status
とかいうエラーがでできます.
#コンパイル(成功)
__undefined reference to `timeGetTime@0'__でGoogle検索すると,記事から以下の解決策がわかります.
>gcc a.c -lwinmm
めでたく実行結果が出できます.
1001.000000[msec]
seriru13 さんの記事から, libwinmm.a を使用するのに -lwinmm オプションが必要であったのだと類推されます.
#記事修正履歴
19.11.23 / (コンパイル(成功)) old : "winmm.lib" → revised : "libwinmm.a"