mieki256's diary



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

golangをインストール。 :

まずは Ubuntu に golang をインストールしないと話にならない。以下でインストール。
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/amd64
Go 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をビルド。 :

公式リポジトリのパッケージをアンインストール。
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のバージョンを変えてビルドする。 :

それぞれのバージョンを変えてみたらどうだろう。
  • SDL2 を 2.0.6 に、
  • SDL2_image を 2.0.1 に、
  • SDL2_mixer を 2.0.1 に、
  • SDL2_gfx を 1.0.1 に。
と言うのも。以下を見ると、Ubuntu 17.10 (artful) ではそういう組み合わせらしいので…。

_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も鳴ってる。

以上です。

過去ログ表示

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