2017/10/29(日) [n年前の日記]
#2 [prog][windows] Windows10 x64 + MSYS2上でgo-sdl2をインストール
Windows10 x64 + MSYS2上で go-sdl2 をインストールしようと試みたり。ただ、ちょっとコレ、自分の環境では問題があって解決できてない点があるけど…。
◎ MSYS2上でgolang 32bit版をインストール。 :
Windows10 x64上に golang 64bit版はインストール済みなのだけど、MSYS2上で go version と打っても「そんなのねえよ」と言ってくる。別途インストールしないとダメなのかなあ、と思えてきたので試しにインストール。既にインストール済みの golang にPATHを通すだけではいかんのだろうか?
スタートメニュー → MSYS2 MinGW 32-bit を実行。
pacman -Ss パッケージ名の一部、でパッケージを検索。
ちなみに、後になって気づいたけど、
pacman -S パッケージ名、でインストール。
golang関係の環境変数を設定。~/.bashrc に以下を追加。要するに、MSYSTEM という環境変数が MINGW32 の時だけ、GOROOT、GOPATH、GOOS、GOARCH を設定する。
修正した ~/.bashrc の内容を反映。
go の環境変数を確認。
go のバージョンを確認。
以下、参考ページ。
_pacman - Use Go lang with MSYS2 - Stack Overflow
スタートメニュー → MSYS2 MinGW 32-bit を実行。
pacman -Ss パッケージ名の一部、でパッケージを検索。
$ pacman -Ss i686-go mingw32/mingw-w64-i686-go 1.9.1-1 [インストール済み] Go Lang (mingw-w64) mingw32/mingw-w64-i686-gobject-introspection 1.54.1-1 Introspection system for GObject-based libraries (mingw-w64) mingw32/mingw-w64-i686-gobject-introspection-runtime 1.54.1-1 Introspection system for GObject-based libraries - runtime files (mingw-w64) mingw32/mingw-w64-i686-goocanvas 2.0.2-5 Canvas widget for GTK+ that uses the Cairo 2D library (mingw-w64) mingw32/mingw-w64-i686-googletest-git r975.aa148eb-1 Google Test (mingw-w64)mingw-w64-i686-go てのが golang 32bit版っぽいなと。ちなみに、pacman -Ss x86_64-go で検索すれば64bit版がリストアップされるはず。
ちなみに、後になって気づいたけど、
pacman -Ss go langなら、golang関係のものだけリストアップされる模様。
pacman -S パッケージ名、でインストール。
pacman -S mingw-w64-i686-go
golang関係の環境変数を設定。~/.bashrc に以下を追加。要するに、MSYSTEM という環境変数が MINGW32 の時だけ、GOROOT、GOPATH、GOOS、GOARCH を設定する。
case "${MSYSTEM}" in MINGW32) GOROOT=/mingw32/lib/go GOPATH=$HOME/gocode GOOS=windows GOARCH=386 ;; MINGW64) ;; *) esacちなみに、golang は、GOOS、GOARCH を変更することで、別の環境用のビルドができるらしい。
修正した ~/.bashrc の内容を反映。
source ~/.bashrc
go の環境変数を確認。
go env
go のバージョンを確認。
go version
以下、参考ページ。
_pacman - Use Go lang with MSYS2 - Stack Overflow
◎ MSYS2 MinGW 32-bit上でSDL2関係をインストール。 :
go-sdl2 の README.md には「MSYS2を使ってもSDL2はインストールできるよ」と書いてあるように見えなくもないので、SDL2関係のインストールをしてみる。
_veandco/go-sdl2: SDL2 binding for Go
スタートメニュー → MSYS2 MinGW 32-bitを実行。
SDL2関係のパッケージを検索。
以下でインストール。
SDL2のバージョンを確認。
_veandco/go-sdl2: SDL2 binding for Go
スタートメニュー → MSYS2 MinGW 32-bitを実行。
SDL2関係のパッケージを検索。
$ pacman -Ss SDL2 i686 mingw32/mingw-w64-i686-SDL2 2.0.6-1 A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard (Version 2) (mingw-w64) mingw32/mingw-w64-i686-SDL2_gfx 1.0.1-2 SDL graphics drawing primitives and other support functions wrapped up in an addon library for the Simple Direct Media (SDL) cross-platform API layer mingw32/mingw-w64-i686-SDL2_image 2.0.1-2 A simple library to load images of various formats as SDL surfaces (Version 2) mingw32/mingw-w64-i686-SDL2_mixer 2.0.1-3 A simple multi-channel audio mixer (Version 2) (mingw-w64) mingw32/mingw-w64-i686-SDL2_net 2.0.1-1 A small sample cross-platform networking library (Version 2) (mingw-w64) mingw32/mingw-w64-i686-SDL2_ttf 2.0.14-1 A library that allows you to use TrueType fonts in your SDL applications (Version 2) (mingw-w64) mingw32/mingw-w64-i686-smpeg2 2.0.0-4 SDL2 MPEG Player Library (mingw-w64)
以下でインストール。
pacman -S mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_image mingw-w64-i686-smpeg2 mingw-w64-i686-SDL2_mixer mingw-w64-i686-SDL2_net mingw-w64-i686-SDL2_ttf mingw-w64-i686-SDL2_gfx
SDL2のバージョンを確認。
$ sdl2-config --version 2.0.6
◎ MSYS2上でgo-sdl2をインストール。 :
スタートメニュー → MSYS2 MinGW 32-bitを実行。
go-sdl2 をインストール。
環境変数 GOPATH で指定された場所に、go-sdl2 がインストールされた。
go-sdl2 をインストール。
go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf}
環境変数 GOPATH で指定された場所に、go-sdl2 がインストールされた。
◎ 動作確認。 :
hellogosdl2.go というファイル名で、以下を作成。
hellogosdl2.go
実行してみる。
この状態なら、go-sdl2 を使ったソースも動く模様。
gopherrun も動かしてみた…が、こちらは終了時にエラーが…。
hellogosdl2.go
package main import "github.com/veandco/go-sdl2/sdl" func main() { if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 800, 600, sdl.WINDOW_SHOWN) if err != nil { panic(err) } defer window.Destroy() surface, err := window.GetSurface() if err != nil { panic(err) } rect := sdl.Rect{0, 0, 200, 200} surface.FillRect(&rect, 0xffff0000) window.UpdateSurface() sdl.Delay(2500) }
実行してみる。
go run hellogosdl2.goウインドウが開いて、赤い四角が表示され、数秒経ったらウインドウが閉じられた。
この状態なら、go-sdl2 を使ったソースも動く模様。
gopherrun も動かしてみた…が、こちらは終了時にエラーが…。
go get -v -u -d github.com/koron/gopherrun cd $GOPATH/src/github.com/koron/gopherrun (ソースを修正) go build
$ ./gopherrun.exe Exception 0xc0000005 0x0 0x0 0x772e1161 PC=0x772e1161 signal arrived during external code execution github.com/veandco/go-sdl2/mix._Cfunc_Mix_FreeMusic(0x337534f0) github.com/veandco/go-sdl2/mix/_obj/_cgo_gotypes.go:355 +0x33 github.com/veandco/go-sdl2/mix.(*Music).Free.func1(0x337534f0) D:/home/mieki256/gocode/src/github.com/veandco/go-sdl2/mix/sdl_mixer.go:236 +0x4f github.com/veandco/go-sdl2/mix.(*Music).Free(0x337534f0) D:/home/mieki256/gocode/src/github.com/veandco/go-sdl2/mix/sdl_mixer.go:236 +0x21 main.runGame(0x0, 0x0) D:/home/mieki256/gocode/src/github.com/koron/gopherrun/gopherrun.go:92 +0x360 main.main() D:/home/mieki256/gocode/src/github.com/koron/gopherrun/gopherrun.go:96 +0x1a eax 0x0 ebx 0x398b89b0 ecx 0x398ca2d8 edx 0x0 edi 0x10d0000 esi 0x398ca2d0 ebp 0x8afd08 esp 0x8afba8 eip 0x772e1161 eflags 0x210246 cs 0x23 fs 0x53 gs 0x2b起動直後にいきなりESCキーを押して終了した場合は、エラーを出さずに終了するのだけど。少し動かすとエラーが出るようで。
◎ 問題点。 :
MSYS2を動かしてない状態で、出来上がった .exe を実行しても、起動すらしない…。
おそらくだけど、D:\msys64\mingw32\bin\ 以下の .dll を呼び出して動いてたりして、故に、そこに PATH が通ってない状態では動かない、のではないかなあ…。
ということで、MSYS2 が無くても動くようにするにはどうしたらいいんですか? てな疑問が残る結果に。
おそらくだけど、D:\msys64\mingw32\bin\ 以下の .dll を呼び出して動いてたりして、故に、そこに PATH が通ってない状態では動かない、のではないかなあ…。
ということで、MSYS2 が無くても動くようにするにはどうしたらいいんですか? てな疑問が残る結果に。
[ ツッコむ ]
以上です。