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:

これで簡単な時間計測ならこれでいける感じになった.かな.