Boost (C++)

オープンソースのライブラリで、構文解析から並列処理まで多岐に渡る便利機能を扱えるようにする。

インストール

FIXME

実体が必要なライブラリ

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)
programming/cpp/boost.txt · 最終更新: 2018/06/05 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0