mieki256's diary



2017/10/25(水) [n年前の日記]

#1 [raspberrypi][ruby][gosu] Raspberry Pi Zero W に Ruby + gosu をインストールしようとしてハマっていたり

_Hello - Gosu を眺めたら、「powered by OpenGL or OpenGL ES」というテキストを見かけたわけで。

今までてっきり、gosu は OpenGL にしか対応してないと思い込んでたけど、OpenGL ES にも対応していたのか…。であれば、ひょっとして、Raspberry Pi Zero W 上でもそこそこの速度で動くのではあるまいか。

てなわけで、Pi Zero W 上で gosu がインストールできないか試していたのだけど。これがなかなか上手く行かず。何度試しても、gosu-example の画面が出てこない…。真っ暗なまま…。

未だに成功してないけど、試してみた作業についてメモ。ちなみに環境は、Raspberry Pi Zero W + raspbian stretch。

OpenGLを有効にすればインストールできなくもない。 :

Pi Zero W 上でも、GL driver を有効にして、Pi2 / Pi3 と同様のインストール手順を踏めば、一応は gosu をインストールできるし、gosu-example の画面も表示されることは確認できた。

_Getting Started on Linux - gosu/gosu Wiki

sudo apt install build-essential libsdl2-dev libsdl2-ttf-dev libpango1.0-dev libgl1-mesa-dev libopenal-dev libsndfile-dev libmpg123-dev libgmp-dev
sudo apt install ruby-dev

sudo gem install gosu --pre

sudo apt install ruby-rmagick libmagickcore-dev libmagickwand-dev pulseaudio freeglut3 freeglut3-dev
sudo gem install chipmunk opengl glu glut rmagick

sudo gem install gosu-examples
gosu-examples

ただ、Zero W 上では、良くて20FPS前後しか出ない。これでは話にならない。Pi3 上なら、もうちょっと滑らかに動いたのだけどなあ…。

OpenGLを有効にしないでインストールしたい。 :

Pi Zero系は、公式にはOpenGLをサポートしてないので、できれば OpenGL を使わない形でインストールしたい。以下のページに従ってインストールすれば動くのかな、と思ったのだけど…上手く行かない…。

_Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki

とりあえず、失敗事例としてメモ。

ビルドに必要なパッケージをインストール。
sudo apt-get install ruby ruby-dev build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev
「注意、'libsndfile-dev' の代わりに 'libsndfile1-dev' を選択します」と言われてしまったが、一応インストールできた。

後になって分かったけど、どうやら libmpg123-dev も必要らしい。
sudo apt-get install libmpg123-dev

SDL2をビルド。失敗事例その1。 :

SDL2 をビルドする。まずは、SDL2関係を入れておくためのディレクトリを作っておいて。
mkdir ~/Package
cd ~/Package
mkdir gosu
cd gosu

SDL2関係のソースをDL。現行版は 2.0.7 だった。また、SDL_ttf 2.0 もDLしておく。

_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
_SDL_ttf 2.0

wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz

SDL2のソースを解凍してmakeする。1時間以上かかる、と件の説明ページには書かれてたけど、Zero W では30分ぐらいで済んだ。
tar zxvf SDL2-2.0.7.tar.gz
cd SDL2-2.0.7/
./configure --prefix=/opt/SDL2 --disable-video-x11
make
  • configure に指定してる --prefix=/opt/SDL2 は「ビルド後のファイルのインストール場所を /opt/SDL2 にしろ」てな指定。この指定が無い場合、 /usr/local/ 以下にビルドしたファイルがインストールされる模様。
  • --disable-video-x11 は、動作に X を必要としない設定にしろ、という指定じゃないかな。たぶん。

ビルドできたようなら root権限でインストール。
sudo make install

SDL_ttfのソースも解凍してmakeする。これは1分もかからなかった。
cd ..
tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_ttf-2.0.14
./configure --prefix=/opt/SDL2
make
sudo make install

何か言ってきた。「/opt/SDL2/lib にインストールしたぞ」「共有ライブラリとして使えるようにするには以下を参考にしろ」と言ってるのかな。
----------------------------------------------------------------------
Libraries have been installed in:
   /opt/SDL2/lib
If you ever happen to want to link against installed libraries in a given directory,
LIBDIR, you must either use libtool,
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.
----------------------------------------------------------------------

これでSDL2関係はインストールできたはず。なのだけど…。

gosuをビルド。失敗事例。 :

gosu をインストール、というかビルド。
sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

エラーが出た。
$ sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

Fetching: gosu-0.12.1.gem (100%)
Building native extensions with: '--with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags="/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a"'
This could take a while...
ERROR:  Error installing gosu:
        ERROR: Failed to build gem native extension.
    current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
/usr/bin/ruby2.3 -r ./siteconf20171024-11477-11cwjm7.rb extconf.rb --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags="/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a"
The Gosu gem requires some libraries to be installed system-wide.
See the following site for a list:
https://github.com/gosu/gosu/wiki/Getting-Started-on-Linux
checking for TTF_RenderUTF8_Blended() in -lSDL2_ttf... no
checking for main() in -lopenal... yes
checking for AL/al.h... yes
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
  /var/lib/gems/2.3.0/extensions/arm-linux/2.3.0/gosu-0.12.1/mkmf.log
current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
make "DESTDIR=" clean
current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
make "DESTDIR="
compiling ../../src/Audio.cpp
In file included from ../../src/Audio.cpp:24:0:
../../src/MPEGFile.hpp:9:20: fatal error: mpg123.h: そのようなファイルやディレクトリはありません
#include <mpg123.h>
                    ^
compilation terminated.
Makefile:231: ターゲット 'Audio.o' のレシピで失敗しました
make: *** [Audio.o] エラー 1
make failed, exit code 2
Gem files will remain installed in /var/lib/gems/2.3.0/gems/gosu-0.12.1 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/arm-linux/2.3.0/gosu-0.12.1/gem_make.out

ひょっとすると、SDL2をビルドする際の configure のオプションが違うのかもしれない。 _Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki には、
If you are already using Raspbian Jessie,
try this variant of the ./configure command instead:
とか書いてあるし…。オプションを変えて、SDL2をビルドし直してみる。
cd ..
cd SDL2-2.0.7
make clean
./configure --host=armv7l-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
make
sudo make install
  • --host=armv7l-raspberry-linux-gnueabihf は、Pi2 / Pi3 の場合に渡すオプションだった。この時点では意味が分からず指定しちゃってる。
  • Pi1 や Zero 系は ARMv6 なので、--host=arm-raspberry-linux-gnueabihf を指定するのだろうか? それとも、そこは何も指定しなくてもいいのだろうか?
  • --disable-* で色々な機能を無効化してる。--disable-video-opengl で OpenGL を無効にすることで、OpenGL ES が使われるようになる、のかな。自信無し。

この状態で、もう一度 gosu をインストール。…さっきと同じエラーが出た。

エラーメッセージには、「mpg123.h が見つからねえよ」と書いてあるようにも見える。ググってみたら、以下のやり取りに遭遇。「mpg123.h が欲しいなら libmpg123-dev を apt でインストールしてみろや」と言ってるのかな。

_Play mp3 on raspberry with mpg123 and c++ - Stack Overflow

libmpg123-dev とやらをインストールしてみる。
sudo apt install ilbmpg123-dev

もう一度 gosu をインストール。15分以上時間がかかったけど、ビルドが通ってインストールできたっぽい。

ということは、libmpg123-dev が足りてなかっただけか…。であれば、最初の configure オプションで SDL2 を make し直して、gosu もアンインストール・再インストールしてみよう…。

gosuをアンインストール。
sudo gem uninstall gosu

その後、SDL2を、オプションを変えてビルドし直して、インストール。gosu も再インストール。

gosu-examples をインストールして動作確認。
sudo gem install gosu-examples
gosu-examples --fullscreen

画面が出ない…。すると、たくさんオプションがついてるほうの configure で SDL2 をビルドしないとダメってことかな。

たくさんオプションがついてるほうで試してみたけど、やっぱり画面が出ない。うーん。

gosuに必要なgemをインストール。 :

そういえば、gosu-examples を実行した際、「○○がねえよ」と怒られた。他にも、rmagick、chipmunk、gl 等が必要らしい。そのあたりも全部インストールしておく。
sudo apt install ruby-rmagick libmagickcore-dev libmagickwand-dev pulseaudio freeglut3 freeglut3-dev

sudo gem install chipmunk opengl glu glut rmagick

SDL2をまたビルド。 :

以下のページで、Raspberry Pi に SDL2 をインストールする方法について説明されてた。今度は、この内容に従ってビルドしてみよう…。

_Raspberry Pi - Building SDL 2 on Raspbian | Solarian Programmer

sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev libtiff5-dev libwebp-dev automake
前述のページの説明では libjpeg8-dev もインストールしてるけど、試してみたら、libjpeg8-dev が、libjpeg-dev、libjpeg62-turbo-dev と競合すると言ってきたので、そこだけは除外した。

make clean を実行してビルドしたファイルを消去してから、configure を実行。
cd ~/Package/gosu/SDL2-2.0.7
make clean
mkdir build && cd build
../configure --prefix=/opt/SDL2 --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
件のページによると、「--host=armv7l-raspberry-linux-gnueabihf の指定は Raspberry Pi2用」と書いてあるな…。そこだけ除外しておけばいいのかな?

もう一度 make して、sudo make install をする。
make
sudo make install

gosu をアンインストールして、再インストール。
sudo gem uninstall gosu
sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

gosu-example を実行してみた。ダメだった。

他のSDL2関係もインストール。 :

SDL_image 2.0 等も必要になるのだろうか。そっちもインストールしてみるか…。

_SDL_image 2.0
_SDL_mixer 2.0

cd ~/Package/gosu
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.zip
tar zxvf SDL2_image-2.0.2.tar.gz
cd SDL2_image-2.0.2/
mkdir build
cd build
../configure --prefix=/opt/SDL2
make
sudo make install
cd ../../SDL2_ttf-2.0.14
../configure --prefix=/opt/SDL2
make
sudo make install

SDL2インストールの別記事を参考にして作業。 :

別記事も見かけたので、そちらに従ってインストールもしてみたり。この場合、/usr/local/ にインストールされる模様。

_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob

sudo apt-get install libfontconfig-dev qt5-default automake mercurial libtool libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libtiff5-dev libwebp-dev libasound2-dev libaudio-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxss-dev libesd0-dev freeglut3-dev libmodplug-dev libsmpeg-dev libgmp-dev

この例では、hg (Mercurial) を使って、SDL2 の最新版のソースをクローンしてる模様。
hg clone http://hg.libsdl.org/SDL
cd SDL

ビルドは以下。この例では、--host=arm-raspberry-linux-gnueabihf を指定してるな…。
./autogen.sh
./configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-opengl --host=arm-raspberry-linux-gnueabihf
makesudo make install
sudo make install

他の SDL関係をビルドしてインストール。
cd
cd code
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
tar zxvf SDL2_image-2.0.2.tar.gz
tar zxvf smpeg2-2.0.0.tar.gz
tar zxvf SDL2_mixer-2.0.2.tar.gz
tar zxvf SDL2_net-2.0.1.tar.gz
tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_image-2.0.1
./autogen.sh
./configure
make
sudo make install
cd ..
cd SDL2_ttf-2.0.14
./autogen.sh
./configure
make
sudo make install
cd ..

これでもダメだった。

ビルドしてインストールしたアレコレをアンインストール。 :

ビルドしてインストールしてしまったアレコレをアンインストールする時は、以下でいいらしい。たぶん。自信無いけど。
sudo make uninstall

ちなみに、make する際に作られたアレコレは以下で削除できる。のかな。たぶん。
make clean

libsdl2-dev等のパッケージを再インストール。 :

一応メモ。自分でSDL2 をビルドせずに、公式リポジトリから再インストールする際は以下。
sudo aptitude reinstall libsdl2-2.0-0 libsdl2-dev
sudo aptitude reinstall libsdl2-image-2.0-0 libsdl2-image-dev
sudo aptitude reinstall libsdl2-mixer-2.0-0 libsdl2-mixer-dev
sudo aptitude reinstall libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev

Raspberry Pi上でgosuを利用する際の注意点。 :

まだ動かせてないわけだけど、説明ページでは、以下の注意事項が書いてあるように見えた。一応メモ。
  • 「キー入力が端末に打ち込まれていくので危ないよ。知らない間にヤバイ系のコマンドを実行しちゃうかもしれないよ」
  • 「Raspberry Pi上で gosu を使うとフルスクリーンでしか描画できないよ」
前者はヤバイな…。一応、端末への入力を無視してくれるツールも存在するらしいけど。

_inoremap/shut-term-keys: Workaround for keystrokes leaking into terminal on Raspbian

関係ありそうなページをメモ。 :

要するに、Pi Zero上での SDL2 のビルドとインストールが鬼門なのだろうけど…。

_Golang と SDL2 でゲームを作る - KaoriYa
_Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki
_Getting Started on Linux - gosu/gosu Wiki
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
_Raspberry Pi - Building SDL 2 on Raspbian | Solarian Programmer
_Problems using SDL2 on raspberry pi without X11 running - SDL Development - Simple Directmedia Layer
_SDL2 version 2.0.4 package availability - Raspberry Pi Forums
_Installing SDL2 on Raspbian Jessie
_[SOLVED]Building/Installing SDL2 on RaspBerryPi - SDL Development - Simple Directmedia Layer
_Play mp3 on raspberry with mpg123 and c++ - Stack Overflow
_SDL2 hardware acceleration - Raspberry Pi Forums

「SDL_ttf 2.0 は OpenGLにしか対応してなくて、OpenGL ES には非対応」という話が気になる。そのせいで画面が出なかったのだろうか…?

しかし、gosu の起動時に、EGL display が get できなかった、というエラーメッセージが表示されてた時もあったし…。そもそも EGL が使えていない気配も…。

#2 [raspberrypi][python][pygame] Raspberry Pi Zero W上でpygameを動かしてみたけど

以前作成した、640x480 のウインドウ内で BG x 2 + スプライト160枚を pygame で描画するスクリプトを、Raspberry Pi Zero W + raspbian stretch 上で動かしてみたけれど。

8FPSしか出なかった…。

スプライトを非表示にしても17fpsとかそんな感じなので厳しいなと。やはり Zero系の非力なCPUで、ソフトウェア描画なんてするもんじゃない、ということかなと。

以上、1 日分です。

過去ログ表示

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