Windows環境のmakeでこけた備忘


c++で作られたfastTextをWindows環境でコンパイルしようとしたらmakeでこけてはまった話
(fastTextは結果的にあんまり関係ないです。C++コンパイラの話です)

WindowsでC++のソースをコンパイルしたい

c++で作られたfastTextというものを使いたかったのですが、gitにソースしか落ちてなかったのでコンパイルする必要がありました。

そこでGitをインストールしたときになんか入ってた(Git Bash)MinGWを使えばいけるんじゃね?と思い、Windows(Bash on Windows)でfastTextを使うを参考に進めてみました。(Bash on Windowsっつってんだろというツッコミはスルーで)

はまった経緯

とりあえずgitでDLしてmakeするのね、g++いるのねってことがわかりました。

ここでg++のDLにはMinGWを正規ルートでインストールしてパッケージ管理画面からg++を追加してインストールする必要があるらしいのでインストールして追加。
ここでmakeとg++はコマンドがきくようになりました。

ということでfastTextをDLしてコンパイルじゃー!

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make

と思ったらエラーでた。。。。

'thread' is not a member of 'std'

えーなんで???
と思いましたが、どうやらいろいろと調べた結果、MinGWさんはg++をいれてもPthreadが入っていないからできないんだとかなんとか。。むむむ(POSIX のスレッド(pthread)をサポートしてないんだとか)
いろいろ調べてMinGW用のPthreadをDLして配置してみてもうまくいかず、、時間切れでした。

解決策

悔しすぎるので帰ってから家のPC(Win)で再チャレンジすることに。

ここでMinGWを使うのをやめました。
そもそもc++の新しいバージョンに対応してなさそうだったので…。。。ちーん

気を取り直して、Pthreadとかも対応しているCygwinを使うことに。

Cygwinを公式からインストールし、
以下のパッケージ(Devel下)をDLしました(下の方は適当に選んだので不要だったかも)

  • make
  • gcc-g++
  • cygwin32-gcc-core(いらなかった)
  • cygwin32-gcc-g++(いらなかった)
  • mingw64-x86_64-pthreads(いらなかった)
  • mingw64-x86_64-winpthreads(いらなかった)

とりあえずこれでcygwin上でmakeが通ることを確認!!やったー
あー疲れた。。。

(追記)
Cygwin以外にもmsys2でもできるようです。本当はこっちのほうがいいのかも