2017/10/28(土) [n年前の日記]
#1 [ubuntu][golang] Ubuntu 16.04にgolangとgo-sdl2をインストール
VMware + Ubuntu 16.04 LTS上で、Go言語(golang)からSDL2を使って画像等を描画できるらしい go-sdl2 を使ってみたい。
_veandco/go-sdl2: SDL2 binding for Go
何か言ってきた。
Ubuntu公式リポジトリの SDL2 は、2.0.4 らしい…。となると…最新版をインストールしないとダメなのだろうか…。
_veandco/go-sdl2: SDL2 binding for Go
◎ golangをインストール。 :
まずは Ubuntu に golang をインストールしないと話にならない。以下でインストール。
バージョンを確認。
goのパッケージがインストールされる場所を作成。
環境変数 GOPATH に、上記の場所を指定してやる。
~/.bashrc を再読み込み。
ただ、以下によると、比較的新しい版をインストールすることもできるらしい。
_Ubuntu - golang/go Wiki
Ubuntu 16.04 LTS なら、以下でイケる、と書いてある。試してみる。
sudo apt install golang
バージョンを確認。
$ go version go version go1.6.2 linux/amd64古いな…。まあ、いいか。
goのパッケージがインストールされる場所を作成。
mkdir ~/go
環境変数 GOPATH に、上記の場所を指定してやる。
vi ~/.bashrc以下を追加。
export GOPATH=$HOME/go
~/.bashrc を再読み込み。
source ~/.bashrc
ただ、以下によると、比較的新しい版をインストールすることもできるらしい。
_Ubuntu - golang/go Wiki
Ubuntu 16.04 LTS なら、以下でイケる、と書いてある。試してみる。
sudo add-apt-repository ppa:longsleep/golang-backports sudo apt-get update sudo apt-get install golang-go
$ go version go version go1.8.3 linux/amd64Go 1.8 がインストールされた模様。最新版の Go 1.9.x ではないけれど、比較的新しい。
◎ 公式リポジトリ版のSDL2をインストール。 :
Ubuntu公式リポジトリに置いてあるSDL2関係のファイルをインストール。
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev
◎ go-sdl2をインストール。 :
go get -v github.com/veandco/go-sdl2/sdl 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
何か言ってきた。
$ go get -v github.com/veandco/go-sdl2/sdl github.com/veandco/go-sdl2 (download) github.com/veandco/go-sdl2/sdl # github.com/veandco/go-sdl2/sdl go/src/github.com/veandco/go-sdl2/sdl/audio.go:22:9: note: #pragma message: SDL_DequeueAudio is not supported before SDL 2.0.5 #pragma message("SDL_DequeueAudio is not supported before SDL 2.0.5") ^ # github.com/veandco/go-sdl2/sdl go/src/github.com/veandco/go-sdl2/sdl/video.go:21:9: note: #pragma message: SDL_SetWindowResizable is not supported before SDL 2.0.5 #pragma message("SDL_SetWindowResizable is not supported before SDL 2.0.5") ^「SDL 2.0.5 より前はサポートしてねえよ」と言ってるのかな?
Ubuntu公式リポジトリの SDL2 は、2.0.4 らしい…。となると…最新版をインストールしないとダメなのだろうか…。
◎ SDL2をビルド。 :
公式リポジトリのパッケージをアンインストール。
ビルドに必要になりそうなパッケージをインストール。他にも必要なパッケージがあるかもしれない。
SDL2のソースをDLしてくる。
_Index of /release
_Index of /projects
_SDL_gfx / SDL2_gfx - ferzkopp.net
SDL2をビルドする。のだけど、このバージョンの組み合わせでは問題があるのでやらないほうがいい…。
SDL2-2.0.7 は一応ビルドできた。
しかし、SDL2_image でちょっと問題が。
make をしたら、エラーが。
sudo apt remove libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev sudo apt autoremove
ビルドに必要になりそうなパッケージをインストール。他にも必要なパッケージがあるかもしれない。
sudo apt install build-essential automake mercurial libtool qt5-default libfontconfig-dev sudo apt install freeglut3-dev libasound2-dev libaudio-dev libdbus-1-dev libegl1-mesa-dev libesd0-dev libflac-dev libfluidsynth-dev libfreeimage-dev libgles2-mesa-dev libglu1-mesa-dev libjpeg-dev libmirclient-dev libmircommon-dev libmircookie-dev libmircookie2 libmircore-dev libmodplug-dev libmpg123-dev libopenal-dev libpango1.0-dev libpng12-dev libprotobuf-dev libpulse-dev libsndfile1-dev libsndio-dev libtiff-dev libtiff5-dev libudev-dev libvorbis-dev libwayland-bin libwayland-dev libwebp-dev libxcursor-dev libxi-dev libxinerama-dev libxkbcommon-dev libxrandr-dev libxss-dev libxt-dev libxv-dev x11proto-video-dev zlib1g libsamplerate0-dev
SDL2のソースをDLしてくる。
_Index of /release
_Index of /projects
_SDL_gfx / SDL2_gfx - ferzkopp.net
mkdir ~/sdl2 cd ~/sdl2 wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.tar.gz wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz wget http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.3.tar.gz
SDL2をビルドする。のだけど、このバージョンの組み合わせでは問題があるのでやらないほうがいい…。
tar zxvf SDL2-2.0.7.tar.gz cd SDL2-2.0.7 mkdir build && cd build ../configure make sudo make install cd ../..
SDL2-2.0.7 は一応ビルドできた。
- /usr/local/include/SDL2/ 以下に *.h が、
- /usr/local/lib/ 以下に libSDL2*.so が、
しかし、SDL2_image でちょっと問題が。
tar zxvf SDL2_image-2.0.2.tar.gz cd SDL2_image-2.0.2 mkdir build && cd build ../configure make sudo make install cd ../..
make をしたら、エラーが。
../IMG_png.c:578:16: error: ‘struct <anonymous>’ has no member named ‘png_write_png’ lib.png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); ^ Makefile:591: ターゲット 'IMG_png.lo' のレシピで失敗しました make: *** [IMG_png.lo] エラー 1どうすりゃいいんだ。
◎ SDL2のバージョンを変えてビルドする。 :
それぞれのバージョンを変えてみたらどうだろう。
_Ubuntu - パッケージ検索結果 -- sdl2
一々コピペで入力するのは面倒臭いので、download.lst というファイルを作成して以下を記述。
download.lst
以下のように wget を使うことで、一括でダウンロードできる。
で。試してみたところ、この組み合わせなら make 時にエラーが出なかった。 どうやら Ubuntu 16.04 で SDL2 を使うなら、この組み合わせにしておくほうが無難っぽい。
既にインストールしてしまった SDL2-2.0.7 をアンインストール。
SDL2-2.0.6 等を解凍、ビルド、インストール。
共有ライブラリのキャッシュを更新。
この状態なら、go-sdl2 のインストール時も文句を言ってこなかった。
ちなみに、go-sdl2 を再インストールしたいときは…。
動作確認は、Raspberry Pi Zero W + raspbian stretch + golang + go-sdl2 で行った手順と同じ。
- SDL2 を 2.0.6 に、
- SDL2_image を 2.0.1 に、
- SDL2_mixer を 2.0.1 に、
- SDL2_gfx を 1.0.1 に。
_Ubuntu - パッケージ検索結果 -- sdl2
wget https://www.libsdl.org/release/SDL2-2.0.6.tar.gz wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz wget http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.1.tar.gz wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz
一々コピペで入力するのは面倒臭いので、download.lst というファイルを作成して以下を記述。
download.lst
https://www.libsdl.org/release/SDL2-2.0.6.tar.gz https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.1.tar.gz
以下のように wget を使うことで、一括でダウンロードできる。
wget -i download.lst
で。試してみたところ、この組み合わせなら make 時にエラーが出なかった。 どうやら Ubuntu 16.04 で SDL2 を使うなら、この組み合わせにしておくほうが無難っぽい。
既にインストールしてしまった SDL2-2.0.7 をアンインストール。
cd ~/sdl2 cd SDL2-2.0.7/build sudo make uninstall make clean cd ../..
SDL2-2.0.6 等を解凍、ビルド、インストール。
tar zxvf SDL2-2.0.6.tar.gz cd SDL2-2.0.6 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf SDL2_image-2.0.1.tar.gz cd SDL2_image-2.0.1 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf smpeg2-2.0.0.tar.gz cd smpeg2-2.0.0 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf SDL2_mixer-2.0.1.tar.gz cd SDL2_mixer-2.0.1 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf SDL2_net-2.0.1.tar.gz cd SDL2_net-2.0.1 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf SDL2_ttf-2.0.14.tar.gz cd SDL2_ttf-2.0.14 mkdir build && cd build ../configure make sudo make install cd ../.. tar zxvf SDL2_gfx-1.0.1.tar.gz cd SDL2_gfx-1.0.1 mkdir build && cd build ../configure make sudo make install cd ../..
共有ライブラリのキャッシュを更新。
sudo ldconfig
この状態なら、go-sdl2 のインストール時も文句を言ってこなかった。
ちなみに、go-sdl2 を再インストールしたいときは…。
- ~/go/pkg/linux_amd64/github.com/ 以下の veandco を削除。
- ~/go/src/github.com/ 以下の veandco を削除。
- go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf} を実行。
動作確認は、Raspberry Pi Zero W + raspbian stretch + golang + go-sdl2 で行った手順と同じ。
◎ 一応love2dも動くか動作確認。 :
love を実行したが、そちらも描画は問題無さそう。
◎ VMware上で動かす際の問題。 :
VMware + Ubuntu 16.04 LTS上で動かすと、gopherrun が物凄い速度で動く。おそらく VMware は Vsync を見てないというか、妙な値を返している気配が。それで速度がおかしくなるのかなと邪推。
◎ 実機上でも動かしてみた。 :
足元で埃を被ってたサブPC(Ubuntu 16.04 LTS機)でも試してみた。
ちゃんと動いてくれた。速度もそれほどおかしくない。ジャンプSEも鳴ってる。
ちゃんと動いてくれた。速度もそれほどおかしくない。ジャンプSEも鳴ってる。
[ ツッコむ ]
以上です。