Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
38
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@softgate

VS 2013 で boost 1.55.0 の 32 / 64 ビット版をビルド

VS 2013 (VC++ 12) で boost 1.55.0 の 32 ビットおよび 64 ビット版をビルドしたときの手順をまとめる。

前提として、boost のアーカイブを D:\Libraries\boost\boost_1_55_0 以下に展開した。以下では、D:\Libraries\boost\boost_1_55_0$(BOOST_ROOT) と呼ぶ。

Boost.Build

まず $(BOOST_ROOT)\tools\build\v2 フォルダに移動して、

> bootstrap.bat
> .\b2 --prefix=D:\Programs\b2 install

とすることで、Boost.Build v2 をビルドし D:\Programs\b2 にインストールすることができる。

Boost.Build のインストールが完了したら D:\Programs\b2\bin にパスを通しておく。

boost 自体のビルド

次に $(BOOST_ROOT) フォルダに移動し、何も考えずに全部の組み合わせでビルドするなら、

> b2 --build-type=complete msvc stage

でビルド完了を待つ。

ただし、これでは並列ビルドをしないのでビルドに時間がかかる上に、64 ビットコードは生成されない。

address-model=32,64 とすれば同時にビルドできるという説もネットで見かけるが、ステージディレクトリが同じだと 32 ビットと 64 ビットのスタティックライブラリ/インポートライブラリが同名になってしまうため、異なる --stagedir 指定で個別にビルドしないといけない気がする。

そこで、もう少し細かくカスタマイズするなら、たとえば

  • シングルスレッド版は不要
  • 32 ビット版と64 ビット版をビルド
  • CRT に静的リンクするスタティックライブラリ + CRT に動的リンクする DLL
  • 並列処理は 8 プロセスまで許可

という構成で

> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=64 --stagedir=stage/x64 -j 8

のような感じでビルドするとよい。

なお、64 ビット OS 上で 64 ビットコードを生成する際はツールセット(VC++ へのパス?)の切り替えで 64 ビットコンパイラも使用できるが、ここではすべて 32 ビットコンパイラで生成した。

このようにビルドした場合、boost を利用するプロジェクトでは

  • インクルードフォルダに $(BOOST_ROOT) フォルダ
  • ライブラリフォルダに
    • 32 ビットなら $(BOOST_ROOT)\stage\x86\lib
    • 64 ビットなら $(BOOST_ROOT)\stage\x64\lib

を含めることで、boost が使えるようになる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
38
Help us understand the problem. What are the problem?