mieki256's diary



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 -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関係のパッケージを検索。
$ 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 をインストール。
go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf}

環境変数 GOPATH で指定された場所に、go-sdl2 がインストールされた。

動作確認。 :

hellogosdl2.go というファイル名で、以下を作成。

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 が無くても動くようにするにはどうしたらいいんですか? てな疑問が残る結果に。

以上です。

過去ログ表示

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