2017/10/29(日) [n年前の日記]
#1 [prog][windows] Windows10 x64にMSYS2を再インストール
Windows10 x64上で go-sdl2 を使えないものかと思ったわけで。
go-sdl2 の README.md を眺めると、mingw-w64 だか MSYS2 が必要と書いてあるように見えたのと、golang 64bit版との兼ね合いで MSYS2 64bit版が必要になりそうな雰囲気を感じたので、今までインストールしてあった MSYS2 32bit版をアンインストールして、MSYS2 64bit版をインストールすることにした。
_MSYS2 homepage
go-sdl2 の README.md を眺めると、mingw-w64 だか MSYS2 が必要と書いてあるように見えたのと、golang 64bit版との兼ね合いで MSYS2 64bit版が必要になりそうな雰囲気を感じたので、今までインストールしてあった MSYS2 32bit版をアンインストールして、MSYS2 64bit版をインストールすることにした。
_MSYS2 homepage
◎ 参考ページ。 :
_MSYS2 による gcc 開発環境の構築 - MSYS2 のインストールから初期化処理まで - しっぽのさきっちょ | text.Baldanders.info
_MSYS2 による gcc 開発環境の構築 - gcc パッケージ群の導入 - しっぽのさきっちょ | text.Baldanders.info
_MSYS2/MinGW-w64 (64bit/32bit) インストール手順 メモ
_2. MSYS2 - とりあえず雑記帳
_MSYS2でWindows上にコマンドライン環境を作る - Qiita
_MSYS2で快適なターミナル生活 - Qiita
_RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする - Qiita
_MSYS2 による gcc 開発環境の構築 - gcc パッケージ群の導入 - しっぽのさきっちょ | text.Baldanders.info
_MSYS2/MinGW-w64 (64bit/32bit) インストール手順 メモ
_2. MSYS2 - とりあえず雑記帳
_MSYS2でWindows上にコマンドライン環境を作る - Qiita
_MSYS2で快適なターミナル生活 - Qiita
_RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする - Qiita
◎ MSYS2 64bit版をインストール。 :
msys2-x86_64-20161025.exe をDLして実行。今回は D:\msys64 にインストールした。
スタートメニュー → MSYS2 64bit → MSYS2 MSYS を実行。mintty が起動する。試しに uname -a と打つと、i686 (32bit) なのか、それとも x86_64 (64bit) なのか、等の情報が表示される。
pacman -Syu と打ってパッケージを更新。最初の1回目はbashを更新するので処理終了後無反応になる。ウインドウを無理矢理閉じる。その後、また MSYS2 MSYS を実行して、pacman -Syu でパッケージを更新。exit で終了。
世の中には問答無用で C:\msys64 が存在するものとして処理をしてしまうアプリが存在するので、今回インストールした D:\msys64 から C:\msys64 にシンボリックリンクを作成。
スタートメニュー → MSYS2 64bit → MSYS2 MSYS を実行。mintty が起動する。試しに uname -a と打つと、i686 (32bit) なのか、それとも x86_64 (64bit) なのか、等の情報が表示される。
pacman -Syu と打ってパッケージを更新。最初の1回目はbashを更新するので処理終了後無反応になる。ウインドウを無理矢理閉じる。その後、また MSYS2 MSYS を実行して、pacman -Syu でパッケージを更新。exit で終了。
世の中には問答無用で C:\msys64 が存在するものとして処理をしてしまうアプリが存在するので、今回インストールした D:\msys64 から C:\msys64 にシンボリックリンクを作成。
◎ MSYS2 32bit版をインストール。 :
Rubyinstaller2 の関係で、MSYS2 32bit版も必要になりそうな気がする。MSYS2 32bit版もインストールしておく。
msys2-i686-20161025.exe をDLして実行。D:\msys32 にインストール。
スタートメニュー → MSYS2 32bit → MSYS2 MSYS を実行。mintty が起動する。64bit版と同様に pacman -Syu を繰り返してパッケージを更新。1回目は強制終了。2回目はexitで終了。
問答無用で C:\msys32 があるものとして処理するアプリが存在するので、D:\msys32 から C:\msys32 にシンボリックリンクを作成。
msys2-i686-20161025.exe をDLして実行。D:\msys32 にインストール。
スタートメニュー → MSYS2 32bit → MSYS2 MSYS を実行。mintty が起動する。64bit版と同様に pacman -Syu を繰り返してパッケージを更新。1回目は強制終了。2回目はexitで終了。
問答無用で C:\msys32 があるものとして処理するアプリが存在するので、D:\msys32 から C:\msys32 にシンボリックリンクを作成。
◎ MSYS2上でmingw等をインストール。 :
スタートメニュー → MSYS2 MSYS を起動。
pacman -S パッケージ、でインストールができる。以下をインストール。
それぞれ、どのパッケージをインストールしてくるか尋ねてくる。
pacman -S パッケージ、でインストールができる。以下をインストール。
pacman -S git base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
それぞれ、どのパッケージをインストールしてくるか尋ねてくる。
- base-devel は Enter を叩いて全部入れた。
- mingw-w64-i686-toolchain と mingw-w64-x86_64-toolchain は、ada、fortran 関係は除外してインストールした。入力値としては「1 2 3 7 8 9 10 11 12 13 14 15 16 17」を打った。
- 後になって気づいたけど、objc は Objective-C のことだったのだな…。自分は使わないから、ソレも除外しておけばよかった…。
◎ ~/.bashrcを変更。 :
環境変数 HOME が示すディレクトリ内に、~/.bashrc 等を作成した。おそらく標準では、C:\msys64\home\ 内にその手のファイルが作られるのだろうとは思うけど…。
mintty 起動時に ~/.bash_profile が読まれるので、その中で「 ~/.bashrc が存在するなら読んどけ」と指示。
.bash_profile
~/.bash_aliases に alias を列挙。
.bash_aliases
~/.bashrc の中で「 ~/.bash_aliases があるなら読んどけ」と指定。それと、プロンプトを変更。
.bashrc
mintty 起動時に ~/.bash_profile が読まれるので、その中で「 ~/.bashrc が存在するなら読んどけ」と指示。
.bash_profile
# base-files version 3.1-4
# ~/.bash_profile: executed by bash for login shells.
if [ -e /etc/bash.bashrc ] ; then
source /etc/bash.bashrc
fi
if [ -e ${HOME}/.bashrc ] ; then
source ${HOME}/.bashrc
fi
# Set PATH so it includes user's private bin if it exists
if [ -d ${HOME}/bin ] ; then
PATH=${HOME}/bin:${PATH}
fi
# Set MANPATH so it includes users' private man if it exists
# if [ -d ${HOME}/man ]; then
# MANPATH=${HOME}/man:${MANPATH}
# fi
# Set INFOPATH so it includes users' private info if it exists
# if [ -d ${HOME}/info ]; then
# INFOPATH=${HOME}/info:${INFOPATH}
# fi
~/.bash_aliases に alias を列挙。
.bash_aliases
alias ls='ls --show-control-chars --color=auto' alias ll='ls -al'
~/.bashrc の中で「 ~/.bash_aliases があるなら読んどけ」と指定。それと、プロンプトを変更。
.bashrc
# export TERM=msys
# export OUTPUT_CHARSET=UTF-8
# export TZ=JST-9
export LANG=ja_JP.UTF-8
# export LC_ALL='C'
# export TPUT_COLORS=256
if [ -f "${HOME}/.bash_aliases" ]; then
source "${HOME}/.bash_aliases"
fi
# PS1='\[\e]0;\w\a\]\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w \[\e[0m\]\$ '
PS1='\[\e]0;\u@\h: $MSYSTEM: \w\a\]\[\e[01;32m\]\u@\h\[\e[00m\]: \[\e[35m\]$MSYSTEM\[\e[00m\]: \[\e[01;34m\]\w\[\e[00m\]\$ '
case "${MSYSTEM}" in
MINGW32)
GOROOT=/mingw32/lib/go
GOPATH=$HOME/gocode
GOOS=windows
GOARCH=386
;;
MINGW64)
;;
*)
esac
[ ツッコむ ]
#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 が無くても動くようにするにはどうしたらいいんですか? てな疑問が残る結果に。
[ ツッコむ ]
#3 [movie] 「アンドリューNDR114」を視聴
BS朝日で、「アンドリューNDR114」なる映画が流れてたので視聴。1999年に公開された、アイザック・アシモフ原作のSF映画、らしい。
_アンドリューNDR114 - Wikipedia
アシモフ原作ということでフツーに面白かった。まあ、ぶっちゃけ、内容は ピノキオなんだけど…。
最初のあたりは、ロボットの造形だの、未来世界のデザインだの、本で知識を吸収する設定だの、アレコレがちとダサイ感じがして不安になったけれど。作品内の時間経過に伴ってデザインが変化していったので、おそらくわざとそういうデザインにしてたのだろうなと。昔のSF映画風 → BTTFとかあのあたりのSF映画風 → 近年のSF映画風、みたいな。原作がそもそも古いので、レトロ風味を意識していた可能性がありそうな。
製作費に対して興行成績はボロボロだったらしいけど…。まあ、ロボットと人間がそうなっちゃうお話なんて、一般人は気持ち悪がって距離を置くんじゃないのかなと邪推したり。最後まで眺めれば気に入ってくれる人が結構出てきそうだけど。実際、評価は高いらしいし。
ロボットが主人公なので、そこで描かれるアレコレの純粋さが強調されるという効能があるなと感じたり。人間キャラで話を作ると生々しさが入ってきちゃうので、「そんなわけねえだろ」とつい思ってしまう場面が出てくるけれど。ロボットや人形なら、おとぎ話として成立しやすくなる、そんな面があるよなと。
それはともかく、ロボット三原則を逸脱してそうなシーンがちょこちょこあったような気がしたのだけど…。まあ、冒頭で、三原則をドーンと紹介したら「二度と見せるな」と言われてしまう、てなシーンがあったから…。そういうアレコレはあまり気にしないで見ていただきたい、てなことかもしれないなと。「CASSHERN」でヘルメットがアレしたのと似たようなもんで。 *1
_アンドリューNDR114 - Wikipedia
アシモフ原作ということでフツーに面白かった。まあ、ぶっちゃけ、内容は ピノキオなんだけど…。
最初のあたりは、ロボットの造形だの、未来世界のデザインだの、本で知識を吸収する設定だの、アレコレがちとダサイ感じがして不安になったけれど。作品内の時間経過に伴ってデザインが変化していったので、おそらくわざとそういうデザインにしてたのだろうなと。昔のSF映画風 → BTTFとかあのあたりのSF映画風 → 近年のSF映画風、みたいな。原作がそもそも古いので、レトロ風味を意識していた可能性がありそうな。
製作費に対して興行成績はボロボロだったらしいけど…。まあ、ロボットと人間がそうなっちゃうお話なんて、一般人は気持ち悪がって距離を置くんじゃないのかなと邪推したり。最後まで眺めれば気に入ってくれる人が結構出てきそうだけど。実際、評価は高いらしいし。
ロボットが主人公なので、そこで描かれるアレコレの純粋さが強調されるという効能があるなと感じたり。人間キャラで話を作ると生々しさが入ってきちゃうので、「そんなわけねえだろ」とつい思ってしまう場面が出てくるけれど。ロボットや人形なら、おとぎ話として成立しやすくなる、そんな面があるよなと。
それはともかく、ロボット三原則を逸脱してそうなシーンがちょこちょこあったような気がしたのだけど…。まあ、冒頭で、三原則をドーンと紹介したら「二度と見せるな」と言われてしまう、てなシーンがあったから…。そういうアレコレはあまり気にしないで見ていただきたい、てなことかもしれないなと。「CASSHERN」でヘルメットがアレしたのと似たようなもんで。 *1
*1: あのヘルメットの扱いは、「今回原作通りには作らないよ」という作り手の意思表示だろうと想像しながら見てたけど、実際はどうなんだろう…。
[ ツッコむ ]
以上、1 日分です。