mieki256's diary



2023/07/29() [n年前の日記]

#1 [love2d][ubuntu][linux] Ubuntu 20.04 LTS上でlove2dが動かなかった件について

Ubuntu Linux 18.04 LTS から 20.04 LTS にアップグレードした環境で、love2d 11.3, 11.4 PPA版を動かそうとしても、libsndio.so.6.1 を要求されてしまって動かなかったのだけど、その原因が分かった。独自にビルドしたSDL2関連の共有ライブラリが使われる状態になっていたせいだった。

本来、Ubuntu Linux 20.04 LTS は、SDL2の共有ライブラリとして、/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 を使うのだけど、今回アップグレードした環境では、/usr/local/lib/libSDL2-2.0.so.0 が使われていて、その libSDL2-2.0.so.0 が古かったため、libsndio.so.6.1 を要求して、しかしそんなファイルは無いので、エラーを出してしまっていた。

解決策は以下。
この状態でPPA版 love2d 11.4 を実行したら(端末上で love と打つ)、love2d がエラーを出さずに動いてくれた。

余談。PPA版 love2d のインストール方法 :

以下のページで配布されてる。

_love-stable : Bart van Strien

以下を打てばインストールできる。
sudo add-apt-repository ppa:bartbes/love-stable
sudo apt update
sudo apt upgrade
sudo apt install love

原因を調べていった際の作業の流れをメモ :

love2d 11.4 PPA版が動いてる環境と動いてない環境に対して、まずは /usr/bin/love のバイナリに違いがあるのか調べてみた。

md5sum という、MD5アルゴリズムによるハッシュ値を取得するツールを使って、/usr/bin/love に違いがあるのか確認。
$ md5sum /usr/bin/love
3c9d0f4a64e21be46ebf56cd253668fc  /usr/bin/love

どちらも同じ値になった。つまり、異なるバイナリを動かしているわけではない、と分かった。

次に、ldd というツールを使って、それぞれが要求する共有ライブラリの一覧を取得した。
ldd /usr/bin/love

_edit_love_dep_so_i52500.txt (動かない環境)
_edit_love_dep_so_onvm.txt (動く環境)

Windows10 x64 22H2 + WinMerge 2.16.20.4 を使って違いを眺めたところ…。
  • 依存している *.so の数が全然違う。
  • 動かない環境の love だけが libsndio.so.6.1 に依存している。
  • 動く環境では、love は libsndio.so.6.1 に依存していない。
  • 呼び出される libSDL2-2.0.so.0 の場所が違う。動く環境は、/usr/lib/x86_64-linux-gnu/。動かない環境は、/usr/local/lib/。

ls /usr/local/lib で、/usr/local/lib/ 内のファイル一覧を眺めてみたら…。

_usr_local_lib.txt

love2d が動かない環境では、/usr/local/lib/ 内に、SDL2関連ファイルがごっそり入っていた。これらのファイルが呼ばれてしまうことで、動作が違ってしまっていたようだなと…。

どうしてこんな状態になっていたのか、日記を検索して調べてみたら、2017/10/28頃に go-sdl2 というライブラリの動作確認をするために、SDL2関連のビルドとインストールをしていた。このせいでおかしなことになっていたのだな…。

_mieki256's diary - Ubuntu 16.04にgolangとgo-sdl2をインストール

そんなわけで、libsndio.so.6.1 が無い、といったエラーが出てアプリが動かない場合は、共有ライブラリがおかしなことになってないか確認する、というのはアリなのかもしれない。

以下を打てば共有ライブラリの一覧が見れるし、libSDL2* がどの場所にあるか確認もできる。
ldconfig -p
$ ldconfig -p | grep SDL2
        libSDL2_ttf-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_ttf-2.0.so.0
        libSDL2_ttf-2.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_ttf-2.0.so
        libSDL2_mixer-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_mixer-2.0.so.0
        libSDL2_mixer-2.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_mixer-2.0.so
        libSDL2_image-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so.0
        libSDL2_image-2.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so
        libSDL2-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
        libSDL2-2.0.so.0 (libc6) => /usr/lib/i386-linux-gnu/libSDL2-2.0.so.0
        libSDL2-2.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so

以上です。

過去ログ表示

Prev - 2023/07 - 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