LoginSignup
1
0

Boost.Coroutine2をwindows/VisualStudioで使う

Last updated at Posted at 2024-03-07

前提

  • windows
  • Visual Studio 2022
  • Boostは現時点での最新バージョン(1.84.0)
  • C++11以降

Boostのダウンロード

にアクセスし、Latest Releaseから最新のやつをダウンロード(.7zでも.zipでも可)
解凍しておく。

ビルド

コマンドプロンプトかPSを開いて、

.\bootstrap.bat

を実行。なんかファイルが色々作られる。
次に、

.\b2.exe install toolset=msvc runtime-link=static,shared asmflags=\safeseh address-model=32,64 -j9 --with-context --prefix=C:\Users\path\to\install

とすれば C:\path\to\installにincludeとlibフォルダを含むビルド結果が入れられる。

オプションについて補足

  • toolsetではmsvcだったりgccだったりを指定する。msvcのバージョンまで正確に指定することもできる
  • runtime-linkはCランタイムをどうリンクするかで、自分のプロジェクトだとstaticだけでよかったが、一応sharedも指定しておいた。デフォルトではsharedのみなので注意!
  • with-hogehogeでそのライブラリのみをビルドする(後述)。複数のwith-hogeをオプションにつけることができる
  • asmflags=\safeseh はBoost.Contextでwindowsのx86-32bit上でfcontext_tを使うために必要

他のオプションについては https://boostjp.github.io/howtobuild.html の下部を参照のこと。

ビルドするライブラリについて補足

Boostはheaderのみでビルドせず使えるモジュールと、ビルドが必要なモジュールがある。
Boost.Coroutine2自体はビルドがいらないが、それが依存しているBoost.Contextにビルドが必要。よって今回は--with-contextとした。
なお、Boost.CoroutineというCoroutine2に置き換えられたライブラリはビルドがいるのですが、2では使わないので--with-coroutineは不要。

ライブラリの一覧は、

./b2 --show-libraries

で見ることができる。

プロジェクトの設定

VisualStudioで 構成プロパティ→C/C++→全般→追加のインクルードディレクトリ を開き、先ほどビルドした結果のinclude\boost_1_84_0をパスに追加する。

同様に、構成プロパティ→リンカー→全般→追加のライブラリディレクトリ を開き、先ほどビルドした結果のlibをパスに追加する。

インストールの確認

#include <boost/coroutine2/all.hpp>

が動けばとりあえず導入は成功している。が、以下に注意。

注意

Coroutine2(Context)ではコンテキストにfcoutext_tかucontext_tを使える。

を見る限り、fcontext_tを使ったほうがいいだろう。windows環境でこれを使うには罠がいくつかある。

に書いてあるのだが、** コンパイル時に/GLオプションをoffにして、/EHsオプションを付けないといけない。**
これを忘れると、リリースビルドの時に/GLがついてて壊れたりする。

また、現在自分が使っているContextがfcontext_tかucontext_tかを判定する方法も現在調査中。だれか教えてください。
2024/03/11追記:コンパイル時にどちらの実装を使うか決まる。デフォルトだとfcontext_tなのでそのままでよい。

参考文献

BoostJP How To Build https://boostjp.github.io/howtobuild.html
BoostJP Coroutine2 https://boostjp.github.io/tips/coroutine.html
Boost Coroutine2 https://www.boost.org/doc/libs/1_84_0/libs/coroutine2/doc/html/coroutine2/overview.html
MSVC Compiler Option https://learn.microsoft.com/en-us/cpp/build/reference/eh-exception-handling-model?view=msvc-170

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0