【C++】boost::timerを使おうとしてコンパイルで詰まった話
はじめに
諸事情により,C++でタイマー処理を書きたくなった.
環境はMacOSであるため,WINAPIなるものを使うことは出来ません.
さて,どうしましょう?
ということでBoostライブラリを利用したが,コンパイルで詰まったので個人的にメモしておく.
(情報・表現の正確性は保証しません)
Let’s Boost!
「Boost (ブースト)とは、C++の先駆的な開発者のコミュニティ、およびそのコミュニティによって公開されているオープンソースライブラリのことを指す。」 (Wikipediaより引用)
研究でBoostライブラリに依存した某シミュレータを使っている関係上,真っ先にBoostライブラリが思い付いた.
調べたらやっぱりタイマー処理が良い感じに出来るみたいなので使っていきましょう.
Boostのインストール
1 | brew install boost |
インストールしたらPATHを通さなきゃいけないみたい..bash_profile
に以下の内容を追記する.
1 | export PATH=$PATH:/usr/local/Cellar/boost/1.65.1_1/include |
Homebrew使って入れたなら/usr/local/Cellar/boost/
あたりに入っていると思うので適宜書き換えてください.
見つからなかったらsudo find / -name '*boost*'
とでも打って検索すれば良いんじゃないですかね?
実行してみる
とりあえず動作確認してみる.
コードは https://boostjp.github.io/tips/timer.html から引用しました
1 | #include <iostream> |
実行結果は以下の通り.
1 | $ g++ timer.cpp |
コンパイルエラーです.困った. (wscriptが予め入っていて./waf
でよしなにやってくれる某シミュレータとは勝手が違いますね……)
ということで調べてみると,私と同じところで詰まった人がいたみたい.
https://stackoverflow.com/questions/10565117/undefined-reference-to-boosttimerauto-cpu-timer
要するに-lboost_timer
って書いてboost_timerへリンクしてあげないといけないみたいです.
ということで以下のようにして実行
1 | $ g++ timer.cpp -lboost_timer |
ちゃんと動いた.めでたしめでたし.
Boostで他の機能を使う場合に-lboost_system
とか書く場合もあるらしい.
あとBoost.Pythonを使うときには-lboost_python
とか書く.
とりあえずPATH通してても動かなかったら -lboost_<name>
みたいなコンパイルオプション調べれば良さそう?