背景
- MSVC 非依存で, 再配布可能な C++ STL ライブラリが欲しい
- C++ JIT アプリ用とか
- 最近 Microsft STL(名前がよくない) が OSS 公開されたので, これがつかえるか?
結論として, 実装が MSVC べったり + MSVC ランタイム依存です. clang-cl 対応なども考えられていないようなので, MSVC オンリーと考えたほうがいいでしょう.
(2022/08 追記: clang-cl 対応もちょこちょこ進んでいるようです. ただまだ完全ではなく, clang-15 or clang-16 くらいから動き始めそうな雰囲気?)
他の MSVC 関連の STL を利用しているライブラリを使っているのでなければ, MinGW gcc or llvm-mingw(clang) で libstdc++(MinGW gcc) or libcxx(llvm-mingw) を使ったほうがよいです.
Microsoft STL とは?
今まで MSVC で使っていたのをそのまま OSS 公開したらしいっぽい. ソースコードは Microsoft らしく, きたないです
スタックガードなど使っているのか, MSVC ランタイムに依存しているため, 現状 MSVC 開発環境がないとビルドできない.
clang-cl でビルドできるかもしれない(ただし一部対応してないコンパイラフラッグを書き直しなど必要)
付属の CMakeLists では, clang-cl など他のコンパイラは考慮されていない.
Boost を math の特殊関数(e.g. bessel)の実装に使っていますので, Boost がいります
(ただ, math だけなので, vcpkg で Boost インストール+ビルドしなくても, Boost ヘッダーだけでもいけるかも?)
AzurePipeline で CI ビルドされていますが, Artifact は配布されていないので, 自前ビルドする必要あります.
まとめ
Microsoft STL を再配布し, アプリで使う場合
- STL ヘッダは Microsoft STL のを使う
- ビルドは MSVC で行い, lib(dll)を作っておきこれを配布
- (Optional) MSCVRT が必要であれば, 再配布パッケージをユーザーに入れてもらう
でしょうか.
TODO
- vcpkg, choco, conan とかで prebuild 済みのがないか調べる
- GitHub Actions あたりで CI ビルドする(オフィシャル側では AzurePipeline で Artifact 生成はやる気なさそうなので)
- ビルドした STL が, clang-cl, mingw gcc/clang でビルドできるか調べる