2018/03/13(火) [n年前の日記]
#2 [windows][mruby] MSYS2でSDL2関係をビルドしたりmrubyをビルドしたり
先日、Windows10 x64 + MSYS2 で mruby をビルドした際は、エラーが出てしまってビルドできなかったのだけど。
ふと、github から最新版の mruby を clone して試していたのがマズかったのではないかと思えてきたわけで。
試しに _mruby 1.4.0 の zip をDLしてビルドしてみたところ、最後までビルドが通った。とメモ。
せっかくだから、SDL2関係も MSYS2 上でビルドできるか実験。
ふと、github から最新版の mruby を clone して試していたのがマズかったのではないかと思えてきたわけで。
試しに _mruby 1.4.0 の zip をDLしてビルドしてみたところ、最後までビルドが通った。とメモ。
せっかくだから、SDL2関係も MSYS2 上でビルドできるか実験。
◎ SDL2関係をビルドするために必要なファイルをインストール。 :
以下のページを参考にして作業。
_MSYS2/MinGW-w64 (64bit/32bit) インストール手順 メモ
ところで、どうもよく分からんのだけど…。スタートメニュー内にある、以下のショートカット…。
それはそれとして。SDL2関係のパッケージをインストールできたら、sdl2-config でバージョンを確認することができるはず。
コンパイラやリンカに渡すオプションも確認できる。
_MSYS2/MinGW-w64 (64bit/32bit) インストール手順 メモ
- スタートメニューから、MSYS2 MinGW 32bit (32bit)、を起動。
- pacman -Syuu で、インストール済みのパッケージを最新版に更新。
- pacman -S base-devel で、おそらくは開発に必要になりそうなツール群をインストール。
- pacman -S mingw-w64-i686-toolchain で、コンパイラその他をインストール。ada や fortran や objc はインストールしなくていいと思うので、「1 2 3 7 9 10 11 12 13 14 15 16 17」みたいな感じで番号を打ち込んでインストールすることになるかと。
- pacman -Ss SDL2 i686 で、SDL2関係のパッケージ一覧を表示。
- pacman -S パッケージ名、で、SDL2関係のパッケージをインストール。
ところで、どうもよく分からんのだけど…。スタートメニュー内にある、以下のショートカット…。
- 「MSYS2 MinGW 32bit (32bit)」
- 「MSYS2 MinGW 64bit (32bit)」
- 「MSYS2 MinGW 32bit (64bit)」
- 「MSYS2 MinGW 64bit (64bit)」
それはそれとして。SDL2関係のパッケージをインストールできたら、sdl2-config でバージョンを確認することができるはず。
$ sdl2-config --version 2.0.8
コンパイラやリンカに渡すオプションも確認できる。
$ sdl2-config --cflags -I/mingw32/include/SDL2 -Dmain=SDL_main $ sdl2-config --libs -L/mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows
◎ SDL2を使ったCソースをビルドしてみる。 :
以下を参考にして、test.c を作成。今回は、~/prg/sdl2/ 以下に、 test.c を作成した。
_Installing SDL for MinGW
コンパイルする。
MSYS2 を使う際に立ち上がる mintty 上から test.exe を実行しても何も出てこないけど、DOS窓を開いて、そこから test.exe を実行したら、ウインドウが開いて、3秒後にウインドウが閉じられた。どうやらビルドできたっぽい。
更に、以下も参考にして、ビルドできるかどうかテスト。
_MSYS2 + MinGW 環境に SDL2 をインストール - takaya030の備忘録
/mingw64 を /mingw32 に変更した Makefile を作成してから make と打ってみたけれど。「/bin/sh が無いよ」と怒られる…。何故…。which sh をしたら、/usr/bin/sh が出てきた。/bin/sh じゃないんか…。
とりあえず、MSYS2 上ならいきなり sdl2-config と打っても動作するので、Makefile 内の 「/bin/sh sdl2-config」の記述は「sdl2-config」にしてみた。この状態ならビルドも通ったし、DOS窓上で実行したらウインドウも表示された。
しかし、mintty 上から実行しようとすると、何も表示されないのは何故なんだろう…。
_Installing SDL for MinGW
#include "SDL2/SDL.h" #include <stdio.h> int main( int argc, char* args[] ) { SDL_Window *window; SDL_Init(SDL_INIT_VIDEO); window = SDL_CreateWindow("SDL2 Window", 100, 100, 640, 480, 0); if(window==NULL) { printf("Could not create window: %s\n", SDL_GetError()); return 1; } SDL_Delay(3000); SDL_DestroyWindow(window); SDL_Quit(); return 0; }
コンパイルする。
g++ -o test.exe test.c -lmingw32 -lSDL2main -lSDL2test.exe ができた。
MSYS2 を使う際に立ち上がる mintty 上から test.exe を実行しても何も出てこないけど、DOS窓を開いて、そこから test.exe を実行したら、ウインドウが開いて、3秒後にウインドウが閉じられた。どうやらビルドできたっぽい。
更に、以下も参考にして、ビルドできるかどうかテスト。
_MSYS2 + MinGW 環境に SDL2 をインストール - takaya030の備忘録
/mingw64 を /mingw32 に変更した Makefile を作成してから make と打ってみたけれど。「/bin/sh が無いよ」と怒られる…。何故…。which sh をしたら、/usr/bin/sh が出てきた。/bin/sh じゃないんか…。
とりあえず、MSYS2 上ならいきなり sdl2-config と打っても動作するので、Makefile 内の 「/bin/sh sdl2-config」の記述は「sdl2-config」にしてみた。この状態ならビルドも通ったし、DOS窓上で実行したらウインドウも表示された。
しかし、mintty 上から実行しようとすると、何も表示されないのは何故なんだろう…。
[ ツッコむ ]
以上です。