自前で作っている、glfw3 を使った OpenGL のフレームワーク、開発環境が、MacOS に
移って、Windows 環境は取り残されていたー。
しかしながら、最近(でもないけど)になって、MSYS2 環境が非常に良くなっているの
で、試しに、コンパイルしてみたので、インストール方法も含めて紹介する。
※基本的に、MSYS2 の clang であっても、std::thread に関連する「未実装」な部分
は残っているようで(これは gcc でも同じだと思う)、他プラットホームで実現出
来る機能が全て揃っている訳では無い事に注意する必要がある。
スレッドのモデルは、POSIX pthread で問題無いのだけど、C++ の「std::async、
std::future」系などは、リンクで失敗する。(何か別のライブラリーをリンクする必
要があるのかもしれないが・・)
まぁ、でも、これらは、かなり便利ではあるけれども、自分が色々なプラットフォーム
で調べた限りでは、とても使えないような実装になっていて、やはり他の方法で実現
する方が良いだろう、「未来」には、改善するかもしれない。
※これで、別スレッドが起動して、裏で動いてくれると思っている人が多いが、実際
の実装は、そうはなっていない。
まず、MSYS2 をインストールする。
※今回インストールに使ったのは「msys2-x86_64-20150512.exe」
一応起動を確認する。
MSYS2 には、3つの起動バッチがある。
mingw32_shell.bat mingw64_shell.bat msys_shell.bat
で、今回メインに使うのは「mingw64_shell.bat」で、他と何が違うかと言うと、64
ビット対応の実行ファイルに対するパスが標準となっているもので、基本コマンド以外
は、基本的に64ビット対応のパッケージをインストールして使う。
標準の状態で、既に「mintty」が動作しているようなので、ホームディレクトリーに
「.minttyrc」をコピーする事で、shell 窓が見やすくなる。
BoldAsFont=no Font=Inconsolata Locale=ja_JP Charset=UTF-8 FontHeight=12 Columns=100 Rows=34 Transparency=medium Term=xterm-256color RightClickAction=paste OpaqueWhenFocused=no PgUpDnScroll=yes
※自分は、基本、UTF-8を使う。
「Inconsolata」は、OTF タイプのフォントで、別途インストールしておく。
このフォントは英字だけなので、日本語は、内部で自動で選択される、この厳密なやり
方は不明であるけれでも、多分、内部は、FreeType2 を使っているので、そのルールに
従っているものと思われる。
※このフォントは「俺俺フレームワーク」のWidgets マネージャーでも使っている。
自分の使っているのは以下。
自分は、テキストエディターはemacsを使っているが、パッケージ管理でemacsを入れる
事も出来るのだけど、パッケージ管理で取得できるバージョンは、日本語 IME のパッチ
が当たっていない版がインストールされるようなので、別途 ime パッチ済みの emacs
を入れて、パスを通しておく。
※パスは「.bash_profile」に追加した、またプロムプト表示は以下のようにした。
# emacs path export PATH=$PATH:/c/emacs/bin # prompt PS1='\h.\w % '
「.bashrc」にコメントアウトしてある箇所があるので、自分の嗜好に合わせて適宜コメント
を取り除く。
alias ls='ls -hF --color=tty'
さて、パッケージ管理コマンドを使って、最新の状態にアップデートしておく。
※このやり方は、みんなが同じようにやっている「まね」である。
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
bash を起動しなおして、さらにアップデート。
$ pacman -Syu
一応 bash をもう一度起動しなおして。
まず、clang をインストール
$ pacman -S mingw-w64-x86_64-clang $ clang --version clang version 3.6.1 (tags/RELEASE_361/final) Target: x86_64-w64-windows-gnu Thread model: posix
※「x86_64」が64ビット対応版
unzip、make をインストール
$ pacman -S unzip $ pacman -S make
続いて、俺俺フレームワークが使っている各種ライブラリーのインストール
$ pacman -S mingw-w64-x86_64-glfw $ pacman -S mingw-w64-x86_64-glew $ pacman -S mingw-w64-x86_64-freetype $ pacman -S mingw-w64-x86_64-libjpeg-turbo $ pacman -S mingw-w64-x86_64-openjpeg2 $ pacman -S mingw-w64-x86_64-libpng $ pacmas -S mingw-w64-x86_64-libtiff $ pacman -S mingw-w64-x86_64-openal $ pacman -S mingw-w64-x86_64-libmad $ pacman -S mingw-w64-x86_64-taglib $ pacman -S mingw-w64-x86_64-faad2 $ pacman -S mingw-w64-x86_64-boost
※今までは、自分でソースを取ってきて、ビルドしていたので、凄く便利、この手順は
MacOS の brew とあまり変らない。
ここで、boost が「中る」・・・
紆余曲折色々回り道したが、Mingw64 環境では、コンパイル時に「-DBOOST_USE_WINDOWS_H」
を追加しないと駄目な事が判った・・・
※これは、windows.h (win32-api)と同居する場合に必要なオプションだと思う。
---------
これで、環境は整った、 GitHub/glfw3_app GitHub から、クローンするなり、アーカイブを取ってきて、
make すればOK!
一応、動作が怪しい部分があるけど、一応、ビルドも通って、動作するようになった!
現在、コンパイルして、動作を確認したアプリ:
spinv ---> Space Invader エミュレーター(動作には ROM/SOUNDS ファイルが必要) bmc ---> ビットマップコンバーター player ---> 音楽プレイヤー gui_test ---> GUI テストサンプル image ---> 画像ビューアー pmdv ---> MMD ファイルビューアー pn ---> パーリンノイズ実験アプリ effv ---> Effekseer のビューアー
※ファイル選択などで、速い操作で誤動作して、実際にはパスが存在しない場所に、
行ってしまった場合は、「xxx.pre」ファイルを編集するか、消せば、やり直せる。
※「build」フォルダがあるアプリは、中に実行ファイルを置いてある。
また、動作に必要な DLL を libraries/dll に置いておいたので、コンパイル等
面倒で、アプリだけを動かしたい人は、各種 dll をアプリと同じ場所に置けば動く
と思う。