Boost (C++)
オープンソースのライブラリで、構文解析から並列処理まで多岐に渡る便利機能を扱えるようにする。
インストール
実体が必要なライブラリ
Boostの中には、ヘッダファイル(.hpp)のみインクルードすれば使えるやつと、実体(.dll)を読み込まないと参照エラーになるやつとがある。
.dllが必要な方は、コンパイル時に「-lboost_XXXX」(XXXXはライブラリ名)を指定する必要がある。
どれが必要かは覚えらんないので、コンパイルエラーが出たらそいつをリンクするようにするでいいや(適当)
CMakeLists.txt の FIND_PACKAGE でパスを検索すると、Boost_LIBRARIES
等の変数に自動的に必要なライブラリを設定してくれるようになる。
- CMakeLists.txt
project(project_name) # 自動的にパスを見つけてくれる # .dllが必要なもののみ指定する FIND_PACKAGE(Boost COMPONENTS program_options system log REQUIRED) message("## Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") # 確認 message("## Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}") # 確認 set(SOURCE_FILES src/main.cpp) add_executable(project_name ${SOURCE_FILES}) # インクルードパスとライブラリの指定 INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) TARGET_LINK_LIBRARIES(project_name ${Boost_LIBRARIES})
個別の注意点
log
きちんとインクルードして、ツールチェインで -lboost_log
フラグも指定してるのに
unresolved reference to boost::log::v2s_mt_XXXX....
みたいなエラーが出た場合、staticライブラリとsharedライブラリで齟齬が発生している可能性がある。
Windowsでは、staticライブラリは.lib、sharedライブラリは.dllで提供されている。両者の違いはまた後で調べるとして、何も指定しないとstaticの方を読みにいこうとして失敗するらしい。
以下をCMakeLists.txtに加えることで、正しい場所を読んでくれるようになる。
ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)