をるふちゃんのブログ

C++ | DirectX | VC++

Boost導入メモ

MSVCだとどうしたらいいのってなる

ダウンロード

とりあえずboost.orgから最新版を落としてくる。
boost_1_62_0.zipをダウンロードした。

解凍

何も考えずにC:\直下にboostというディレクトリを作り、UnZipして出てくるboost_1_62_0をその中に放り込む。
以下のようになる。

C:
   |-boost
      |-boost_1_62_0

ここで色々面倒なので環境変数BOOST_ROOTC:\boost\boost_1_62_0を設定しておいた。
これで%BOOST_ROOT%とすればアクセスができる。

一応これでヘッダオンリーのライブラリ部分は使えるようになるようだ。
というか、使えた。

動作確認

boost.orgのサンプルコードほぼそのままで恐縮であるが、以下のコードが通ればうまくいっている。
もっとも、解凍してパスを通すだけなのだが。

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main() {
    std::for_each( std::istream_iterator<int>( std::cin ), std::istream_iterator<int>(), std::cout << (boost::lambda::_1 * 3) << "\n" );
}

MSVCの場合、プロジェクト設定で追加のインクルードディレクトリに$(BOOST_ROOT)を追加する必要がある。

リンクライブラリを要求される

調子に乗ってコードを書いていくと以下のようなエラーを吐く。

1>LINK : fatal error LNK1104: ファイル 'libboost_regex-vc140-mt-gd-1_62.lib' を開くことができません。

.lib.dllといったリンクライブラリを要求してきている(つまりヘッダオンリーではない関数を呼ぼうとした)
ということなので、これらのパスを通す必要があるわけだが、これらはboostの配布ファイルには直接同梱されていないので自分でビルドする必要がある。

リンクライブラリのビルド

幸いなことに、簡単にできるよう用意されているのでマニュアルに従って実施する。
まず%BOOST_ROOT%ディレクトリ直下にあるbootstrap.batを叩く。
続いて%BOOST_ROOT%ディレクトリでコマンドプロンプトを起動する。

コマンド.\b2と押下したら仮眠をとる。
※というのも、端末の冷却装置がboostするくらい熱くなりとても時間がかかる。
ともあれ、気づいたら%BOOST_ROOT%\stage\libにわんさとリンクライブラリが生産されている。

あとは適切なディレクトリパス(%BOOST_ROOT%\stage\lib)をプロジェクト設定の「リンカ-全般-追加のライブラリディレクトリ」に設定すれば良い。

64bitでも動かしたい場合

b2に色々と情報を与えてやらなければならない。
オプションの意味については公式のマニュアルに譲るとして、
せっかくなので32と64bit版それぞれ.dll.lib版を作ることとしよう。

%BOOST_ROOT%ディレクトリにて以下のコマンドを叩く。

b2 toolset=msvc-14.0 threading=multi variant=debug,release link=static runtime-link=static architecture=x86  address-model=32 --stagedir=stage/x86 -j 4 --without-python
b2 toolset=msvc-14.0 threading=multi variant=debug,release link=shared runtime-link=shared architecture=x86 address-model=32 --stagedir=stage/x86 -j 4 --without-python
b2 toolset=msvc-14.0 threading=multi variant=debug,release link=static runtime-link=static architecture=x86 address-model=64 --stagedir=stage/x64 -j 4 --without-python
b2 toolset=msvc-14.0 threading=multi variant=debug,release link=shared runtime-link=shared architecture=x86 address-model=64 --stagedir=stage/x64 -j 4 --without-python

この端末は2コア4スレッドのため、-j 4オプションを付けている。適宜調整されたい。
私はpythonは使わないため最後に--without-pythonオプションを付けた。これも必要に応じて削除すること。

それと私はVisual Studio 2015を使っているため--toolset=msvc-14.0とした。
このオプションはつけなくても適切なコンパイラを使ってくれるようであるが念のため付け加えておいた。

これによりディレクトリ構成は以下のようになる。

%BOOST_ROOT%
   |- stage
      |-x64
         |-lib
      |-x86
         |-lib