undefined reference to `g_timer_continue' / glib の timers 使い方
glibの timers を使おうとして,g_timer_continue を呼ぶと,「うまく言語化できない」などと言って,コンパイルできなかった.
というか, g_timer_new/start/stop などは使えるのに,なぜ g_timer_continue が使えない... と思ったのだけど,結論からいうと,さっきのエントリ (http://d.hatena.ne.jp/strkpy/20090918/1253206116) でのコンパイラオプションが間違っていた.
インクルードパスなどは,glib-2.0 のほうを指定してたのに,-lglib としていたことで,ライブラリ本体は libglib1.2 のほうにリンクしようとしていた.で, libglib1.2 のヘッダファイルを見たら, timers に g_timer_continue なんてないってさ!
ということで,コンパイラオプションは,
g++ -g -Wall -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 -o hoge hoge.cpp
のように -l もバージョン指定してあげましょう,ってことでした.
ヘッダファイルと本体のほうで違うバージョン読んでたとかもうなんていうか,はあ,そうかあ.もっと早く気づけなかったもんかなあ.
で,使い方
簡単.でもこの変数持ち回らなきゃいけない感じはラッパーかきたくなるなあ.w
#include <iostream> #include <glib.h> #include <unistd.h> using namespace std; int main(int argc, char *argv[]) { cout << "start:" << endl; GTimer *Timer; gulong time; gdouble diff; Timer = g_timer_new(); cout << "sleeping 3 sec." << endl; sleep(3); diff = g_timer_elapsed(Timer, &time); cout << diff << endl; g_timer_stop(Timer); cout << "sleeping 3 sec." << endl; sleep(3); diff = g_timer_elapsed(Timer, &time); cout << diff << endl; g_timer_continue(Timer); cout << "sleeping 3 sec." << endl; sleep(3); diff = g_timer_elapsed(Timer, &time); cout << diff << endl; g_timer_stop(Timer); g_timer_destroy(Timer); cout << "end:" << endl; return 0; }
start: sleeping 3 sec. 3.00014 sleeping 3 sec. 3.00027 sleeping 3 sec. 6.00051 end:
これで簡単な時間計測ならこれでいける感じになった.かな.