1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft STL(MSVC C++ STL 実装)のメモ

Last updated at Posted at 2020-06-19

背景

  • 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 らしく, きたないです :cry:

スタックガードなど使っているのか, 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 でビルドできるか調べる
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?