mieki256's diary



2017/10/30(月) [n年前の日記]

#1 [prog][golang] Windows10 x64上で Mingw-builds版を使って go-sdl2をインストール

go-sdl2 は、golang(Go言語)からSDL2を操って、画像描画等ができるライブラリ。

_veandco/go-sdl2: SDL2 binding for Go

昨日は、Windows10 x64 + MSYS2 で go-sdl2 をインストールしてみたけれど。go-sdl2 の README.md には、Mingw-builds とやらを使ってインストールする方法が書いてある。それに従ってインストール作業をしてみたり。

Mingw-builds版の mingw をインストール。 :

以下のページから辿って、mingw-w64-install.exe をDLして実行。

_Mingw-builds [mingw-w64]

インストールする mingw のタイプを尋ねてくるので…。

mingw_w64_install_ss01.png

以下を選んでNEXTボタンを押す。
  • Version : 7.2.0
  • Architecture : 64bit版なら x86_64 / 32bit版なら i686
  • Threads : win32
  • Exception : 64bit版なら seh / 32bit版なら dwarf
  • Build revision : 0

次にインストール場所を尋ねてくるけど。

mingw_w64_install_ss02.png

自分の場合は以下にした。
  • 64bit版インストール場所 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0
  • 32bit版インストール場所 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0

それぞれ、以下のような指定らしい。
  • Architecture : 32bit版 = i686 / 64bit版 = x86_64
  • Threads : win32 = 単独で動くバイナリを作れるけど一部機能が使えない。
  • Threads : posix = libwinpthread-1.dll を必要とするし遅いけど機能は網羅されてるらしい。
  • Exception : 例外関係。 seh > dwarf > sjlj の順で速いらしい?

_Qt で MinGW-w64 を使用する際に必要になるスレッドモデルと例外機構の選択について | cutlassfish

go-sdl2のビルドに必要なSDL2関連ファイルを入手。 :

以下を参考にして、SDL2関連ファイルを入手する。

_go-sdl2-tut/windows.md at master - vinzBad/go-sdl2-tut

必要なのは、ランタイムバイナリと、Developmentライブラリ。32bit版なら x86 を、64bit版なら x64 をDLする。

_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
SDL2-2.0.7-win32-x64.zip
SDL2-2.0.7-win32-x86.zip
SDL2-devel-2.0.7-mingw.tar.gz

_SDL_image 2.0
SDL2_image-2.0.2-win32-x64.zip
SDL2_image-2.0.2-win32-x86.zip
SDL2_image-devel-2.0.2-mingw.tar.gz

_SDL_mixer 2.0
SDL2_mixer-2.0.2-win32-x64.zip
SDL2_mixer-2.0.2-win32-x86.zip
SDL2_mixer-devel-2.0.2-mingw.tar.gz

_SDL_ttf 2.0
SDL2_ttf-2.0.14-win32-x64.zip
SDL2_ttf-2.0.14-win32-x86.zip
SDL2_ttf-devel-2.0.14-mingw.tar.gz

SDL2関連ファイルを所定の場所にコピー。 :

ランタイムバイナリを解凍する。中に .dll が入っているので、以下にコピーする。
64bit版 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\bin
32bit版 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\bin

Developmentライブラリ(*-devel-*とついてるファイル)を解凍する。それぞれ、中に、以下のフォルダがあるので…。
x86_64-w64-mingw32
i686-w64-mingw32
  • 64bit版なら、x86_64 とついてるほうの中身(bin, include, lib, share等)を、
  • 32bit版なら、i686 とついてるほうの中身(bin, include, lib, share等)を、
それぞれ以下にコピー。
64bit版 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32
32bit版 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\i686-w64-mingw32
上記フォルダ内にも、bin, include, lib があるので、フォルダ名が一致するようにコピーしていけばいい。

環境変数PATHを設定。 :

Windowsの環境変数PATHに、mingw-w64関係のPATHを2つ追加して、gcc等が使える状態にする。
64bit版
D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\bin
D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32\bin

32bit版
D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\bin
D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\i686-w64-mingw32\bin

PATHの先頭に追加しておいたほうがいいけれど…。他のアレコレと衝突しそうなので、今回はbatファイルを作成して、mingw-w64関係を使いたいときだけDOS窓上でそのbatファイルを実行してから作業する、ということにした。

mingww64.bat
@echo # MinGW-w64 (Mingw-builds, MSYS, 64bit) enable

@set MINGW_PATH=D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64
@set MINGW32_PATH=%MINGW_PATH%\x86_64-w64-mingw32

@set PATH=%MINGW_PATH%\bin;%MINGW32_PATH%\bin;%PATH%

@echo add path %MINGW_PATH%\bin
@echo add path %MINGW32_PATH%\bin

set GOOS=windows
set GOARCH=amd64

64bit版は、環境変数 GOARCH=amd64 のままでいいけど、32bit版は、環境変数 GOARCH=386 を指定したほうがいいのだろうか…? とりあえず、go env で、現在のgo関係の環境変数を確認できる。

go-sdl2 をインストール。 :

DOS窓を開いて、前述のbatファイルを実行。環境変数PATHに先ほどインストールした MinGW のソレが追加されたので、gcc 等が使えるようになってるはず。gcc -v でバージョン確認ができる。

これでようやく、go-sdl2 がインストールできるる。
go get -v github.com/veandco/go-sdl2/sdl
エラーが出なければインストールできてる。はず。

go-sdl2 がインストールされたフォルダに、examples というフォルダがあるから、その中の events/events.go を実行すると動作確認ができる。
cd %GOPATH%\src\github.com\veandco\go-sdl2\examples\events
go run events.go
マウスカーソルを動かしたら、座標値がずらずらと表示された。

同じように、go-sdl2 の他のアレコレもインストール。
go get -v github.com/veandco/go-sdl2/mix
go get -v github.com/veandco/go-sdl2/img
go get -v github.com/veandco/go-sdl2/ttf

この状態なら、golang でビルドした .exe が動いてくれた。まあ、SDL2関連のdllにPATHが通っていれば、だけど。

ちなみに .exe を作るのは…。go build hoge.go みたいな感じで打てばいい。

32bit版として go-sdl2 をインストール・利用する場合は…。手元の環境では、golang 64bit版を使って go-sdl2 をインストールすることはできなかったけれど、golang 32bit版を別途インストールして試してみたらインストールすることができた。

gopherrunが終了時にエラーを出す件。 :

以下で紹介・公開されてる gopherrun というソレをビルドして動作確認したものの、終了時にエラーが出て悩んでたのだけど。

_Golang と SDL2 でゲームを作る - KaoriYa
_koron/gopherrun

ジャンプSEとして使われてる jump07.mp3 を ogg に変換して使うようにしてみたら、終了時にエラーが出なくなった。どうやら go-sdl2 は、というより SDL2 は、ogg の使用が推奨っぽいなと…。

余談。mp3は筋が良くない。 :

余談だけど。そもそも mp3 をゲームの類で使うのは、あまり筋が良くないと自分は思っていたりして。

元々 mp3というフォーマットは、映像と一緒に使うことを前提にして作られた音声フォーマットだから、音声データがフレーム単位で記録されていて。故に、音声の実際の長さとフレーム単位のソレが合わなくてギャップ(無音部分)が含まれてしまうことが多いわけで。

そのあたりを解決すべく、例えば Adobe Flash などは、wav を放り込むと一見mp3に変換してるように見えながら独自情報もどこかに持っていてmp3をゴニョゴニョしながら再生してたので、何万円もする Adobe Flash CSx を買わなきゃループBGMを流すことすら難しかった(時期がある)し。 *1 lameなどは変換時にメタ情報としてギャップ情報を含めておくことで「再生側でイイ感じに処理してくれよな…後は…任せた…俺がやってやれるのはここまでだ…」というお約束にして誤魔化してたわけで。

しかも mp3 は、昔は特許が絡んできたので、使用にあたってはライセンス面でちと問題があったりして。いやまあ、 _ついこないだ特許が切れた ようではあるけれど。

それを考えると、後発故にフレーム単位などという縛りもなく、しかもライセンス面で問題ナサゲな ogg (Ogg Vorbis)を使ったほうがいいだろうと。てなわけで、ゲームの類で不可逆圧縮音声データを扱うなら、よほどの理由がない限りmp3よりoggだよなあ、と。しかしこれが、ブラウザの対応状況を鑑みたりすると、また面倒臭い状態に…。

*1: もっとも、後のほうになるとFlash Player側で改良されたのか、lameで変換したmp3もギャップレス再生できるようになっていた…ような記憶が。

以上、1 日分です。

過去ログ表示

Prev - 2017/10 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project