2018/03/15(木) [n年前の日記]
#2 [windows][ruby][mruby] MSYS2 と SDL2 についてメモ
MSYS2 と SDL2 について分かったことをもう少しメモ。
◎ MSYS2上から出来上がった .exe を実行できた。 :
以前、MSYS2上(mintty上)から、ビルドして出来上がった .exe を実行できないとメモしたけれど。
ふと、うっかり、*NIXを使ってる感覚になってしまって、hoge.exe と打ち込まず、./hoge.exe と打ち込んだら、実行できてしまった。とメモ。
なんで? そういうものなの?
ふと、うっかり、*NIXを使ってる感覚になってしまって、hoge.exe と打ち込まず、./hoge.exe と打ち込んだら、実行できてしまった。とメモ。
なんで? そういうものなの?
◎ dllの在り処。 :
MSYS2 の場合、/mingw32/bin/ 以下に SDL2 関係のdllが入ってる模様。pacman -S で、SDL2関係のアレコレをインストールした場合の話だけど。
実際は、これだけでは動作に足りないはず…。おそらく、以下の .dll が必要になりそう。SDL2_image を利用してpng画像を使ったり、oggを再生したりするなら、だけど。
$ ll /mingw32/bin/SDL2* -rwxr-xr-x 1 mieki256 None 1113744 3月 5 14:46 /mingw32/bin/SDL2.dll -rwxr-xr-x 1 mieki256 None 136476 3月 5 14:54 /mingw32/bin/SDL2_image.dll -rwxr-xr-x 1 mieki256 None 142633 11月 9 14:24 /mingw32/bin/SDL2_mixer.dll -rwxr-xr-x 1 mieki256 None 29622 1月 10 2016 /mingw32/bin/SDL2_net.dll -rwxr-xr-x 1 mieki256 None 38303 4月 6 2016 /mingw32/bin/SDL2_ttf.dll
実際は、これだけでは動作に足りないはず…。おそらく、以下の .dll が必要になりそう。SDL2_image を利用してpng画像を使ったり、oggを再生したりするなら、だけど。
libFLAC-8.dll libfreetype-6.dll libjpeg-9.dll libmodplug-1.dll libmpg123-0.dll libogg-0.dll libpng16-16.dll libtiff-5.dll libvorbis-0.dll libvorbisfile-3.dll libwebp-4.dll libwebp-7.dll SDL2.dll SDL2_gfx.dll SDL2_image.dll SDL2_mixer.dll SDL2_net.dll SDL2_ttf.dll smpeg2.dll zlib1.dllビルドして出来上がった .exe が置いてある場所に、上記のdllもコピーしてしまえば配布できるようになるのだろうか。
◎ libgcc_s_dw2-1.dllが必要らしい。 :
出来た .exe を他のPC(Windows8.1機)に持っていって実行してみたら、「libgcc_s_dw2-1.dllがねえよ」と怒られてしまった。そんなファイルも必要になるのか…。
g++ のオプションに、-static-libgcc -static-libstdc++ を指定すると静的リンク(スタティックリンク)になる、という話も見かけたけれど、試してみても効果が無い。exe のファイルサイズは以前と変わらず。なんでだろ。
_MinGWでlibgomp-1.dllがstatic linkできない問題(gcc, OpenMP) - Qiita
_Windows-アプリケーション/MinGW-MSYS/MinGWでのビルド - yanor.net/wiki
他にも、-static -static-libgcc -static-libstdc++ をつけると良い、という話も見かけたけれど、試してみたら SDL2 関係で大量にエラーが出た。うーん。
仕方ないので、/mingw32/bin/ 以下から、libgcc_s_dw2-1.dll をコピーしてきたけれど。その状態で実行したら、今度は「libwinpthread-1.dll が無いぞ」と怒られた。ソレも必要なのか…。コレも、/mingw32/bin/ 以下から、libwinpthread-1.dll をコピーしてみるか…。
各dllをコピーしてきた状態なら、他のPC上でも一応動いた。
しかし、一々dllをコピーするのは面倒だな…。スタティックリンクとやらをしてみたい…。
g++ のオプションに、-static-libgcc -static-libstdc++ を指定すると静的リンク(スタティックリンク)になる、という話も見かけたけれど、試してみても効果が無い。exe のファイルサイズは以前と変わらず。なんでだろ。
_MinGWでlibgomp-1.dllがstatic linkできない問題(gcc, OpenMP) - Qiita
_Windows-アプリケーション/MinGW-MSYS/MinGWでのビルド - yanor.net/wiki
他にも、-static -static-libgcc -static-libstdc++ をつけると良い、という話も見かけたけれど、試してみたら SDL2 関係で大量にエラーが出た。うーん。
仕方ないので、/mingw32/bin/ 以下から、libgcc_s_dw2-1.dll をコピーしてきたけれど。その状態で実行したら、今度は「libwinpthread-1.dll が無いぞ」と怒られた。ソレも必要なのか…。コレも、/mingw32/bin/ 以下から、libwinpthread-1.dll をコピーしてみるか…。
各dllをコピーしてきた状態なら、他のPC上でも一応動いた。
しかし、一々dllをコピーするのは面倒だな…。スタティックリンクとやらをしてみたい…。
[ ツッコむ ]
以上です。