2017/09/01(金) [n年前の日記]
#1 [raspberrypi][pi3d] Raspberry Pi のlibEGL.soについて
巷の解説ページを見ると、Raspberry Pi は /opt/vc/lib/ 以下に libEGL.so , libGLESv2.so がある、とされているのだけど。手元の環境、raspbian stretch ではどちらも入ってなかったのが気になってググってみたり。
どうやら、mesaライブラリの libEGL.so 等と名前が同じなので衝突しちゃうから、libbrcmEGL.so , libbrcmGLESv2.so にリネームした、ということらしい…。
_VC libraries missing errors with Raspbian Stretch - Issue #80 - RPi-Distro/repo
_Games that uses libGLESv2.so doen't work in raspbian stretch - Raspberry Pi Forums
しかしそのことで、OpenGL ESを使ったアレコレが動かなくなった模様。
「sudo rpi-update をすれば修正される」という一文もあるな…。試してみよう…。
ちなみに、/opt/vc/lib/ 以下には、Raspberry Pi用にカスタマイズされたアレコレが入ってる模様。たぶん。
どうやら、mesaライブラリの libEGL.so 等と名前が同じなので衝突しちゃうから、libbrcmEGL.so , libbrcmGLESv2.so にリネームした、ということらしい…。
_VC libraries missing errors with Raspbian Stretch - Issue #80 - RPi-Distro/repo
_Games that uses libGLESv2.so doen't work in raspbian stretch - Raspberry Pi Forums
しかしそのことで、OpenGL ESを使ったアレコレが動かなくなった模様。
「sudo rpi-update をすれば修正される」という一文もあるな…。試してみよう…。
sudo apt update sudo apt upgrade sudo apt dist-upgrade sudo rpi-updateたしかに、/opt/vc/lib/ 以下に libEGL.so と libGLESv2.so が追加された。
ちなみに、/opt/vc/lib/ 以下には、Raspberry Pi用にカスタマイズされたアレコレが入ってる模様。たぶん。
◎ libeEGL.so等を書き換えるパッケージを一応メモ。 :
例えば、以下のパッケージ等をインストールすると、/usr/lib/arm-linux-gnueabihf/ 以下の libEGL.so , libGLESv2.so が変更される模様。と、一応メモ。
_Debian -- stretch の libegl1-mesa-dev パッケージに関する詳細
_Debian -- stretch の libgles2-mesa パッケージに関する詳細
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
ファイル一覧を眺めると、/usr/lib/arm-linux-gnueabihf/libEGL.so 等が列挙されてる。
_Debian -- パッケージのファイル一覧: libegl1-mesa-dev/stretch/armhf
_Debian -- パッケージのファイル一覧: libgles2-mesa/stretch/armhf
libegl1-mesa-dev libgles2-mesa libsdl2-dev
_Debian -- stretch の libegl1-mesa-dev パッケージに関する詳細
_Debian -- stretch の libgles2-mesa パッケージに関する詳細
_Debian -- stretch の libsdl2-dev パッケージに関する詳細
ファイル一覧を眺めると、/usr/lib/arm-linux-gnueabihf/libEGL.so 等が列挙されてる。
_Debian -- パッケージのファイル一覧: libegl1-mesa-dev/stretch/armhf
_Debian -- パッケージのファイル一覧: libgles2-mesa/stretch/armhf
◎ 共有ライブラリを探す順番。 :
libEGL.so 等は共有ライブラリと呼ばれるソレで、各アプリがそれらを使いつつ実行されるのだとか。アプリを実行した際、どこに共有ライブラリがあるのか探す順番が、/etc/ld.so.conf で指定されてるそうで。
Raspberyy Pi3 + raspbian stretch で確認してみよう…。catコマンドを使ってファイルの中身を表示してみる。
ファイルを確認。
つまり、以下の順番で共有ライブラリを探すのだろう…。たぶん。
sudo ldconfig をすると、/etc/ld.so.cache というファイルが更新される。中身はバイナリっぽい。各アプリは、実際には /etc/ld.so.cache を参照して共有ライブラリを見つける、ってことなのかな?
_/etc/ld.so.cacheとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 に説明があった。ldconfig -p で、ld.so.cache の内容をテキストで表示してくれるらしい。
Raspberyy Pi3 + raspbian stretch で確認してみよう…。catコマンドを使ってファイルの中身を表示してみる。
$ cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf/etc/ld.so.conf.d/*.conf をインクルードしてるな…。そっちに実際の指定が書いてあるらしい。
ファイルを確認。
$ ls -al /etc/ld.so.conf.d/ 合計 24 drwxr-xr-x 2 root root 4096 8月 16 09:31 . drwxr-xr-x 120 root root 4096 9月 1 17:35 .. -rw-r--r-- 1 root root 12 8月 12 02:05 00-vmcs.conf -rw-r--r-- 1 root root 74 6月 16 04:17 arm-linux-gnueabihf.conf -rw-r--r-- 1 root root 41 1月 17 2017 fakeroot-arm-linux-gnueabihf.conf -rw-r--r-- 1 root root 44 3月 21 2016 libc.conf4ファイル入ってる。おそらくだけど、00-vmcs.conf てのが、頭に「00」がついてることで一番先に呼ばれるんじゃないかな。
$ cat /etc/ld.so.conf.d/00-vmcs.conf /opt/vc/lib $ cat /etc/ld.so.conf.d/arm-linux-gnueabihf.conf # Multiarch support /lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabihf $ cat /etc/ld.so.conf.d/fakeroot-arm-linux-gnueabihf.conf /usr/lib/arm-linux-gnueabihf/libfakeroot $ cat /etc/ld.so.conf.d/libc.conf # libc default configuration /usr/local/lib
つまり、以下の順番で共有ライブラリを探すのだろう…。たぶん。
/opt/vc/lib /lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabihf/libfakeroot /usr/local/lib
sudo ldconfig をすると、/etc/ld.so.cache というファイルが更新される。中身はバイナリっぽい。各アプリは、実際には /etc/ld.so.cache を参照して共有ライブラリを見つける、ってことなのかな?
_/etc/ld.so.cacheとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 に説明があった。ldconfig -p で、ld.so.cache の内容をテキストで表示してくれるらしい。
$ ldconfig -p | grep libEGL libEGL.so.1 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libEGL.so.1 libEGL.so (libc6,hard-float) => /opt/vc/lib/libEGL.so libEGL.so (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libEGL.so $ ldconfig -p | grep libGLESv2 libGLESv2.so.2 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 libGLESv2.so (libc6,hard-float) => /opt/vc/lib/libGLESv2.so libGLESv2.so (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libGLESv2.solibEGL.so はココにあるよ、てな感じの情報が、/etc/ld.so.cache に記録・列挙されてるのだな…。
◎ 要するに最新版では修正済みらしい。 :
今回、sudo rpi-update をしたことで、libEGL.so や libGLESv2.so が /opt/vc/lib/ の中に追加されたから、OpenGL ES を使うアレコレは、まず /opt/vc/lib/ 内のソレを探すはず。であれば、今まで動かなかったアレコレも、正常動作するようになった可能性が高い。かもしれない。
実際に、es2gears や、Python + pi3d + pi3d_demos の python Earth.py を動かしてみた。どちらも動作してくれた。 *1
つまり、少なくとも pi3d に関しては、昨日行ったシンボリックリンクの変更作業等はしなくてもよくなったらしい。助かった。ありがたや。
実際に、es2gears や、Python + pi3d + pi3d_demos の python Earth.py を動かしてみた。どちらも動作してくれた。 *1
つまり、少なくとも pi3d に関しては、昨日行ったシンボリックリンクの変更作業等はしなくてもよくなったらしい。助かった。ありがたや。
*1: es2gears は相変わらず表示がおかしいけど…。
[ ツッコむ ]
以上です。