2017/10/26(木) [n年前の日記]
#1 [raspberrypi][golang] Raspberry Pi Zero WにSDL2 + golang + go-sdl2をインストール
以下のページで、golang(Go言語)から SDL2 を扱える、go-sdl2 なるライブラリがあると知ったわけで。
_Golang と SDL2 でゲームを作る - KaoriYa
これを動かしてみて、すんなり動くようであれば、少なくともSDL2はちゃんとビルドされてることが分かるかもしれないなと。
ということで、Raspberry Pi Zero W + raspbian stretch 上でインストールを試みたり。
_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
_SDL_image 2.0
_smpeg2
_SDL_mixer 2.0
_SDL_net 2.0
_SDL_ttf 2.0
_Golang と SDL2 でゲームを作る - KaoriYa
これを動かしてみて、すんなり動くようであれば、少なくともSDL2はちゃんとビルドされてることが分かるかもしれないなと。
ということで、Raspberry Pi Zero W + raspbian stretch 上でインストールを試みたり。
◎ 前提条件。libSDL2*.soの在り処。 :
標準状態というか、公式リポジトリから libsdl2-dev をインストールすると…。
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- パッケージのファイル一覧: libsdl2-dev/stretch/armhf
独自にビルドした *.so を使うということは、上記の場所ではなく、別の場所にある *.so を呼び出せるようにする、ということ。
- /usr/include/SDL2/ 以下に *.h が、
- /usr/lib/arm-linux-gnueabihf/ 以下に libSDL2*.so が、
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- パッケージのファイル一覧: libsdl2-dev/stretch/armhf
$ cd /usr/lib/arm-linux-gnueabihf/ $ ll *SDL2* lrwxrwxrwx 1 root root 20 12月 28 2016 libSDL2-2.0.so -> libSDL2-2.0.so.0.4.1 lrwxrwxrwx 1 root root 20 12月 28 2016 libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.4.1 -rw-r--r-- 1 root root 1019424 12月 28 2016 libSDL2-2.0.so.0.4.1 -rw-r--r-- 1 root root 1512430 12月 28 2016 libSDL2.a lrwxrwxrwx 1 root root 20 12月 28 2016 libSDL2.so -> libSDL2-2.0.so.0.4.1 lrwxrwxrwx 1 root root 26 1月 27 2016 libSDL2_image-2.0.so -> libSDL2_image-2.0.so.0.0.1 lrwxrwxrwx 1 root root 26 1月 27 2016 libSDL2_image-2.0.so.0 -> libSDL2_image-2.0.so.0.0.1 -rw-r--r-- 1 root root 67316 1月 27 2016 libSDL2_image-2.0.so.0.0.1 -rw-r--r-- 1 root root 83874 1月 27 2016 libSDL2_image.a lrwxrwxrwx 1 root root 26 1月 27 2016 libSDL2_image.so -> libSDL2_image-2.0.so.0.0.1 lrwxrwxrwx 1 root root 26 2月 2 2016 libSDL2_mixer-2.0.so -> libSDL2_mixer-2.0.so.0.0.1 lrwxrwxrwx 1 root root 26 2月 2 2016 libSDL2_mixer-2.0.so.0 -> libSDL2_mixer-2.0.so.0.0.1 -rw-r--r-- 1 root root 168932 2月 2 2016 libSDL2_mixer-2.0.so.0.0.1 -rw-r--r-- 1 root root 221600 2月 2 2016 libSDL2_mixer.a lrwxrwxrwx 1 root root 26 2月 2 2016 libSDL2_mixer.so -> libSDL2_mixer-2.0.so.0.0.1 lrwxrwxrwx 1 root root 24 2月 2 2016 libSDL2_net-2.0.so -> libSDL2_net-2.0.so.0.0.1 lrwxrwxrwx 1 root root 24 2月 2 2016 libSDL2_net-2.0.so.0 -> libSDL2_net-2.0.so.0.0.1 -rw-r--r-- 1 root root 13828 2月 2 2016 libSDL2_net-2.0.so.0.0.1 -rw-r--r-- 1 root root 14674 2月 2 2016 libSDL2_net.a lrwxrwxrwx 1 root root 24 2月 2 2016 libSDL2_net.so -> libSDL2_net-2.0.so.0.0.1 -rw-r--r-- 1 root root 220602 12月 28 2016 libSDL2_test.a lrwxrwxrwx 1 root root 20 2月 8 2016 libSDL2_ttf-2.0.so -> libSDL2_ttf-2.0.so.0 lrwxrwxrwx 1 root root 25 2月 8 2016 libSDL2_ttf-2.0.so.0 -> libSDL2_ttf-2.0.so.0.14.0 -rw-r--r-- 1 root root 26124 2月 8 2016 libSDL2_ttf-2.0.so.0.14.0 -rw-r--r-- 1 root root 23446 2月 8 2016 libSDL2_ttf.a lrwxrwxrwx 1 root root 25 2月 8 2016 libSDL2_ttf.so -> libSDL2_ttf-2.0.so.0.14.0 -rw-r--r-- 1 root root 936 12月 28 2016 libSDL2main.a
独自にビルドした *.so を使うということは、上記の場所ではなく、別の場所にある *.so を呼び出せるようにする、ということ。
◎ SDL2のビルドに必要なパッケージをインストール。 :
以下を参考にしてSDL2をビルドする。
_Golang と SDL2 でゲームを作る - KaoriYa
_Hardware Accelerated SDL 2 on Raspberry Pi | Life, The Universe and ... Everything!
公式リポジトリ版の libsdl2-dev をアンインストール。
SDL2のビルドに必要になりそうなパッケージをインストール。
また、以下を眺めて、必要になりそうなパッケージがあったら追加インストールする。
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- stretch の libsdl2-image-2.0-0 パッケージに関する詳細 _Debian -- stretch の libsdl2-ttf-2.0-0 パッケージに関する詳細
_Golang と SDL2 でゲームを作る - KaoriYa
_Hardware Accelerated SDL 2 on Raspberry Pi | Life, The Universe and ... Everything!
公式リポジトリ版の libsdl2-dev をアンインストール。
sudo apt-get remove -y --force-yes libsdl2-dev sudo apt-get autoremove -y
SDL2のビルドに必要になりそうなパッケージをインストール。
sudo apt install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile1-dev libudev-dev libasound2-dev libjpeg-dev libtiff5-dev libwebp-dev libaudio-dev libdbus-1-dev automake libfontconfig-dev qt5-default mercurial libtool libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxss-dev libesd0-dev freeglut3-dev libmodplug-dev libsmpeg-dev libmpg123-dev
また、以下を眺めて、必要になりそうなパッケージがあったら追加インストールする。
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- stretch の libsdl2-image-2.0-0 パッケージに関する詳細 _Debian -- stretch の libsdl2-ttf-2.0-0 パッケージに関する詳細
◎ SDL2のソースを取得。 :
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
_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
_SDL_image 2.0
_smpeg2
_SDL_mixer 2.0
_SDL_net 2.0
_SDL_ttf 2.0
◎ SDL2をビルド。 :
SDL2のソースを解凍して、configure して、make して、sudo make install する。
configure は、以下のようなオプションをつけるらしいけど…。
Pi2 の場合は、configure に「--host=armv7l-raspberry-linux-gnueabihf」を追加するらしい。
Pi1 や Zero は…。巷のページを見ると何もつけなくてもいいのかな。どうなんだろ。「SDL 2.0.4 は --host=arm-raspberry-linux-gnueabihf を指定しろ」と書いてある事例も見かけたけど…。
_PiLove - LOVE on RaspberryPI
とりあえず指定しておくか…。
configure をすると、最後のあたりで以下のような表示になった。
makeしてインストールする。
tar zxvf SDL2-2.0.7.tar.gz cd SDL2-2.0.7 mkdir build cd build
configure は、以下のようなオプションをつけるらしいけど…。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
Pi2 の場合は、configure に「--host=armv7l-raspberry-linux-gnueabihf」を追加するらしい。
Pi1 や Zero は…。巷のページを見ると何もつけなくてもいいのかな。どうなんだろ。「SDL 2.0.4 は --host=arm-raspberry-linux-gnueabihf を指定しろ」と書いてある事例も見かけたけど…。
_PiLove - LOVE on RaspberryPI
とりあえず指定しておくか…。
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
configure をすると、最後のあたりで以下のような表示になった。
SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : dummy rpi opengl_es1 opengl_es2 vulkan Input drivers : linuxev linuxkd Using libsamplerate : NO Using libudev : YES Using dbus : NO Using ime : YES Using ibus : NO Using fcitx : NOVideo drivers に、rpi とか opengl_es2 があるから…これで合ってるのかな…?
makeしてインストールする。
make sudo make install
- /usr/local/include/SDL2/ 以下に *.h が、
- /usr/local/lib/ 以下に libSDL2*.so が、
◎ 他のSDL2関係もビルド。 :
SDL2_image, smpeg2. SDL2_mixer, SDL2_ttf もビルドする。
インストール時、以下のようなメッセージが表示された。
smpeg2をビルドしてインストール。
エラーが出る。
解決策を探したら、以下に、参考になりそうな patch があった。
_FS#51926 : [smpeg][smpeg2] Build failed with gcc 6
参考にして以下のように修正。
なんでエラーが出るのかなと思ったら、Debian stretch (raspbian stretch)は gcc6 が標準になったらしい。そのせいでエラーが出るっぽい。
_第5章 stretch で注意すべき点
_2016年6月28日 Debian 9 "Stretch"のコンパイラはGCC 6オンリーで:Linux Daily Topics|gihyo.jp … 技術評論社
引き続き make とインストール。
SDL2_mixer をビルドしてインストール。
SDL2_net をビルドしてインストール。
SDL2_ttf もビルドしてインストールするのだけど、少し修正。OpenGLを使わないように修正してからビルドするのだとか。
tar zxvf SDL2_image-2.0.2.tar.gz cd SDL2_image-2.0.2 && mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf make sudo make install
インストール時、以下のようなメッセージが表示された。
---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use ibtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ----------------------------------------------------------------------「/usr/local/lib にインストールされたよ」と言ってるのだな…。
smpeg2をビルドしてインストール。
tar zxvf smpeg2-2.0.0.tar.gz cd smpeg2-2.0.0 && mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf make
エラーが出る。
$ make /bin/bash ./libtool --tag=CXX --mode=compile g++ -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"smpeg2\" -DVERSION=\"2.0.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I.. -g -O2 -D_REENTRANT -I/usr/local/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -DTHREADED_AUDIO -DNDEBUG -Wall -I.. -DNOCONTROLS -I.. -I../audio -I../video -fno-exceptions -fno-rtti -MT hufftable.lo -MD -MP -MF .deps/hufftable.Tpo -c -o hufftable.lo `test -f 'audio/hufftable.cpp' || echo '../'`audio/hufftable.cpp libtool: compile: g++ -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"smpeg2\" -DVERSION=\"2.0.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I.. -g -O2 -D_REENTRANT -I/usr/local/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -DTHREADED_AUDIO -DNDEBUG -Wall -I.. -DNOCONTROLS -I.. -I../audio -I../video -fno-exceptions -fno-rtti -MT hufftable.lo -MD -MP -MF .deps/hufftable.Tpo -c ../audio/hufftable.cpp -fPIC -DPIC -o .libs/hufftable.o ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] }; ^ ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] ../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing] Makefile:778: ターゲット 'hufftable.lo' のレシピで失敗しました make: *** [hufftable.lo] エラー 1
解決策を探したら、以下に、参考になりそうな patch があった。
_FS#51926 : [smpeg][smpeg2] Build failed with gcc 6
参考にして以下のように修正。
--- smpeg2-2.0.0/audio/hufftable.cpp.orig 2017-10-26 05:31:28.825871428 +0900 +++ smpeg2-2.0.0/audio/hufftable.cpp 2017-10-26 05:35:28.618167063 +0900 @@ -9,6 +9,7 @@ #include "config.h" #endif +#include <climits> #include "MPEGaudio.h" static const unsigned int @@ -550,11 +551,11 @@ htd33[ 31][2]={{ 16, 1},{ 8, 1},{ 4, const HUFFMANCODETABLE MPEGaudio::ht[HTN]= { - { 0, 0-1, 0-1, 0, 0, htd33}, + { 0, UINT_MAX, UINT_MAX, 0, 0, htd33}, { 1, 2-1, 2-1, 0, 7,htd01}, { 2, 3-1, 3-1, 0, 17,htd02}, { 3, 3-1, 3-1, 0, 17,htd03}, - { 4, 0-1, 0-1, 0, 0, htd33}, + { 4, UINT_MAX, UINT_MAX, 0, 0, htd33}, { 5, 4-1, 4-1, 0, 31,htd05}, { 6, 4-1, 4-1, 0, 31,htd06}, { 7, 6-1, 6-1, 0, 71,htd07}, @@ -564,7 +565,7 @@ const HUFFMANCODETABLE MPEGaudio::ht[HTN {11, 8-1, 8-1, 0,127,htd11}, {12, 8-1, 8-1, 0,127,htd12}, {13,16-1,16-1, 0,511,htd13}, - {14, 0-1, 0-1, 0, 0, htd33}, + {14, UINT_MAX, UINT_MAX, 0, 0, htd33}, {15,16-1,16-1, 0,511,htd15}, {16,16-1,16-1, 1,511,htd16}, {17,16-1,16-1, 2,511,htd16},
- #include "MPEGaudio.h" の前に、#include <climits> を追加。
- 「0-1」と書かれてる部分を、「UINT_MAX」で置き換え。
なんでエラーが出るのかなと思ったら、Debian stretch (raspbian stretch)は gcc6 が標準になったらしい。そのせいでエラーが出るっぽい。
_第5章 stretch で注意すべき点
_2016年6月28日 Debian 9 "Stretch"のコンパイラはGCC 6オンリーで:Linux Daily Topics|gihyo.jp … 技術評論社
引き続き make とインストール。
make sudo make install今度は通った。
SDL2_mixer をビルドしてインストール。
cd ~/sdl2 tar zxvf SDL2_mixer-2.0.2.tar.gz cd SDL2_mixer-2.0.2 && mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf make sudo make install
SDL2_net をビルドしてインストール。
cd ~/sdl2 tar zxvf SDL2_net-2.0.1.tar.gz cd SDL2_net-2.0.1 && mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf make sudo make install
SDL2_ttf もビルドしてインストールするのだけど、少し修正。OpenGLを使わないように修正してからビルドするのだとか。
cd ~/sdl2 tar zxvf SDL2_ttf-2.0.14.tar.gz cd SDL2_ttf-2.0.14 && mkdir build && cd build sed -i -e 's/have_opengl=yes/have_opengl=no/' ../configure ../configure --host=arm-raspberry-linux-gnueabihf make sudo make install
◎ 共有ライブラリを探す順番を変更。 :
SDL2をビルドして共有ライブラリファイルを作ったわけだけど、公式リポジトリ版のファイルが使われてしまったら困るわけで。
_Raspberry Piに最新版の各種ツール・言語・ライブラリをインストールする - Qiita
/etc/ld.so.conf を修正して、一番最初の行に /usr/local/lib を追加。これで、「最初に /usr/local/lib 以下から探すように」と設定できるはず。
キャッシュを更新。
順番を確認。
SDL2のバージョンを確認してみる。
_Raspberry Piに最新版の各種ツール・言語・ライブラリをインストールする - Qiita
/etc/ld.so.conf を修正して、一番最初の行に /usr/local/lib を追加。これで、「最初に /usr/local/lib 以下から探すように」と設定できるはず。
キャッシュを更新。
sudo ldconfig
順番を確認。
$ ldconfig -p | grep SDL libSDL2_ttf-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_ttf-2.0.so.0 libSDL2_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so.0 libSDL2_net-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_net-2.0.so.0 libSDL2_mixer-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_mixer-2.0.so.0 libSDL2_image-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_image-2.0.so.0 libSDL2-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2-2.0.so.0 libSDL2-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0 libSDL_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0 libSDL_mixer-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0 libSDL_image-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0 libSDL-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0/usr/local/lib 以下の *.so のほうが先に表示されてる、ように見えるので、コレで大丈夫なのではないかな…。たぶん。おそらく。自信無し。
SDL2のバージョンを確認してみる。
$ sdl2-config --version 2.0.7公式リポジトリの libsdl2-dev をインストールした場合は 2.0.5 と表示されるはずなので、今回ビルドしたSDL2が使われている、のだと思う。
◎ golangをインストール。 :
SDL2 が本当にビルドできているのか確認するために、go-sdl2 を動かしてみたい。そのためには、golang(Go言語) をインストールしないといけない。ということで、インストールしてみる。
環境は、Raspberry Pi Zero W + raspbian stretch。
_Raspberry PiでGo言語を動かす | Golang | kosakalab
golang の最新版を探す。以下から入手できる。
_Downloads - The Go Programming Language
golang 現行版 1.9.1 の ARMv6版は、
解凍する。
/usr/local/go/bin に PATH を通す。また、環境変数 GOPATH も指定しておく。GOPATH の場所は…。今回は ~/go というディレクトリにしておく。
ログアウトして再度ログイン。これでgoが呼びされるようになってるはず。
環境は、Raspberry Pi Zero W + raspbian stretch。
_Raspberry PiでGo言語を動かす | Golang | kosakalab
golang の最新版を探す。以下から入手できる。
_Downloads - The Go Programming Language
golang 現行版 1.9.1 の ARMv6版は、
https://storage.googleapis.com/golang/go1.9.1.linux-armv6l.tar.gzにあるらしい。ディレクトリを作ってダウンロード。
mkdir ~/golang cd ~/golang wget https://storage.googleapis.com/golang/go1.9.1.linux-armv6l.tar.gz
解凍する。
sudo tar -C /usr/local -xzf go1.9.1.linux-armv6l.tar.gz/usr/local 以下に、go というディレクトリが作られる。はず。
/usr/local/go/bin に PATH を通す。また、環境変数 GOPATH も指定しておく。GOPATH の場所は…。今回は ~/go というディレクトリにしておく。
vi ~/.profile
# どこかに追加 export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go
ログアウトして再度ログイン。これでgoが呼びされるようになってるはず。
◎ golangの動作確認。 :
go のバージョンを確認。
巷のサンプル等を打ち込んで動作確認。
_GolangでHello World! - Qiita
$ go version go version go1.9.1 linux/armインストールされてるっぽい。
巷のサンプル等を打ち込んで動作確認。
_GolangでHello World! - Qiita
go run hello.go go build hello.go動いてるっぽい。
◎ go-sdl2をインストール。 :
go-sdl2は以下で公開されてる。
_veandco/go-sdl2: SDL2 binding for Go
goを使ってインストール。~/go/以下にインストールされるはず。
随分時間がかかったけどインストールできたっぽい。たぶん。
_veandco/go-sdl2: SDL2 binding for Go
goを使ってインストール。~/go/以下にインストールされるはず。
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,mix,img,ttf}
随分時間がかかったけどインストールできたっぽい。たぶん。
◎ go-sdl2の動作確認。 :
以下の記事の最後のほうで紹介されてるソースを、 gosdl2hello.go というファイル名で保存して実行。
_Golang と SDL2 でゲームを作る ・ KaoriYa
赤い四角が表示されて、一定時間が経過したら自動で終了した。
ということは、go-sdl2 もインストールできてるし、ビルドしたSDL2も動いてる、ということだろうか。すると、gosu がおかしいのか…?
_Golang と SDL2 でゲームを作る ・ KaoriYa
go run gosdl2hello.go
赤い四角が表示されて、一定時間が経過したら自動で終了した。
ということは、go-sdl2 もインストールできてるし、ビルドしたSDL2も動いてる、ということだろうか。すると、gosu がおかしいのか…?
◎ gopherrunを試しに動かしたり。 :
以下で公開されてる gopherrun を動かしてみたり。
_koron/gopherrun
_Golang と SDL2 でゲームを作る ・ KaoriYa
go build の段階でエラーが出た。どうも、go-sdl2 の構成が昔と今とでは変わってるっぽい。
game.go と gopherrun.go の最初のほうの、sdl_image や sdl_mixer を指定してるあたりを以下のように修正。
go build で作成された、実行形式のファイル、./gopherrun を実行。
ゲーム画面っぽい画面がちゃんと出た。スペースキーでジャンプ。ESCキーで終了(のはず)。
ただ、不具合らしきもの出てる…。
とはいえ、画面が出たのはありがたい。
画面が出た・画像が表示されたということは、SDL2関係はビルドできてる可能性が高いのだろう。となると、やはり gosu がおかしい…。
_koron/gopherrun
_Golang と SDL2 でゲームを作る ・ KaoriYa
go get -v -u -d github.com/koron/gopherrun cd ~/go/src/github.com/koron/gopherrun go build ./gopherrun
go build の段階でエラーが出た。どうも、go-sdl2 の構成が昔と今とでは変わってるっぽい。
game.go と gopherrun.go の最初のほうの、sdl_image や sdl_mixer を指定してるあたりを以下のように修正。
import ( "log" "github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/mix" )
import ( "math/rand" "github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/mix" "golang.org/x/image/math/fixed" )これで go build が通るようになった。
go build で作成された、実行形式のファイル、./gopherrun を実行。
ゲーム画面っぽい画面がちゃんと出た。スペースキーでジャンプ。ESCキーで終了(のはず)。
ただ、不具合らしきもの出てる…。
- 音楽だかSEだかが鳴らない…。コンソールには、「ALSA lib pcm.c: ???? :(snd_pcm_recover) underrun occurred」てなメッセージが残っている。
- 処理が遅い…。かなりガクガクしてる…。まあ、遅いのは Raspberry Pi Zero で動かしてるから、かもしれず。
- ESCキーを押すと終了するはずが、画面は消えても処理が戻ってこない。キーボードからの入力ができなくなる。Ctrl + C も受け付けない。
とはいえ、画面が出たのはありがたい。
画面が出た・画像が表示されたということは、SDL2関係はビルドできてる可能性が高いのだろう。となると、やはり gosu がおかしい…。
[ ツッコむ ]
以上です。