Armadilloフォーラム

共有ライブラリの設定方法

shiroro

2025年8月6日 17時31分

以前質問した
https://armadillo.atmark-techno.com/forum/armadillo/26152
からの派生になるのですが、
VScodeで「デバッグモードのアプリをATDEで実行」した際には出てこなかったエラーが、「デバッグモードのアプリをArmadilloで実行」すると出てくるようになりました。
エラー内容は下記のとおりです。

SqfliteFfiException(error, Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: cannot open shared object file: No such file or directory}) DatabaseException(Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: cannot open shared object file: No such file or directory)

libsqlite3.soファイルがコンテナ内にあるかどうかを検索をかけたところ、/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6のパスが返ってきました。

そのため、https://manual.atmark-techno.com/armadillo-610/armadillo-6x0_abos_migra… を参考にして、TeraTermでコンテナ内に入って、$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/lib/aarch64-linux-gnuを実行し、コンテナを保存して、改めてVScodeからデバッグモードのアプリをArmadilloで実行しましたが、同じSqfliteFfiExceptionが出てきます。
デバッグを実行するとコンテナIDが変わるので、設定を保存した時のコンテナIDとデバッグ時のコンテナIDは別のものでした。

コンテナにおける共有ライブラリの設定はどのようにしたらよいでしょうか。
ご教示いただければ幸いです。

コメント

佐藤です。

> libsqlite3.soファイルがコンテナ内にあるかどうかを検索をかけたところ、/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6のパスが返ってきました。
>
libsqlite3.so は libsqlite3-dev パッケージに含まれています。
コンテナ内に libsqlite3-dev をインストールしてみるとどうでしょうか。

佐藤様

ご回答ありがとうございます。
コンテナ内にlibsqlite3-devをインストールした後、改めて「デバッグモードのアプリをArmadilloで実行」を行いましたが、同じSqfliteFfiExceptionが表示されました。
一応コンテナ内で$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/lib/aarch64-linux-gnuも実行しています。
インストール後に何か設定が必要でしょうか?

ご確認のほど、よろしくお願いたします。

佐藤です。

> ご回答ありがとうございます。
> コンテナ内にlibsqlite3-devをインストールした後、改めて「デバッグモードのアプリをArmadilloで実行」を行いましたが、同じSqfliteFfiExceptionが表示されました。
コンテナ内に "libsqlite3.so" が存在していることは確認できましたでしょうか。

> 一応コンテナ内で$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/lib/aarch64-linux-gnuも実行しています。
> インストール後に何か設定が必要でしょうか?
コロンが抜けています。正しくは以下かと思います。
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/aarch64-linux-gnu

> コンテナ内に "libsqlite3.so" が存在していることは確認できましたでしょうか。

不勉強で申し訳ありませんが、コンテナ内にlibsqlite3-devをインストールした際にできたlibsqlite3.soがあることはどのようにして確認できるでしょうか?

> コロンが抜けています。正しくは以下かと思います。
> $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/aarch64-linux-gnu

申し訳ありません。こちらは私がこちらに入力する際のミスで、実際にTeraTermに入力した際にはコロンを入れた状態です。

佐藤です。

> > コンテナ内に "libsqlite3.so" が存在していることは確認できましたでしょうか。
>
> 不勉強で申し訳ありませんが、コンテナ内にlibsqlite3-devをインストールした際にできたlibsqlite3.soがあることはどのようにして確認できるでしょうか?

最初の質問で、
> libsqlite3.soファイルがコンテナ内にあるかどうかを検索をかけたところ、/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6のパスが返ってきました。
とありますので、このときと同じ方法で検索をかけてみると、libsqlite3.so がヒットするかと思います。

> 最初の質問で、
> > libsqlite3.soファイルがコンテナ内にあるかどうかを検索をかけたところ、/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6のパスが返ってきました。
> とありますので、このときと同じ方法で検索をかけてみると、libsqlite3.so がヒットするかと思います。

失礼いたしました。
なにか違う方法があるのかと勘違いしてしまいました。

コンテナ内で”libsqlite3"の名前のつくファイルを検索すると、
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
/var/lib/dpkg/info/libsqlite3-0:arm64.list
/var/lib/dpkg/info/libsqlite3-0:arm64.md5sums
/var/lib/dpkg/info/libsqlite3-0:arm64.shlibs
/var/lib/dpkg/info/libsqlite3-0:arm64.symbols
が見つかりました。

/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6は、 libsqlite3-devがインストールされる前からあったことは確認しているのですが、/var/lib/dpkg/info/libsqlite3-0~のファイルは libsqlite3-devがインストールされる前からあったのかインストールしてできたものかが不明です。

libsqlite3-devをインストールした場合、保存場所を指定しなければどこにlibsqlite3.soファイルはできるのでしょうか?

ご教授いただければ幸いです。

ちなみに、ファイル検索はroot@9ed99cac04ef:/# fgrep -ril "libsqlite3" /var 2> /dev/nullと入力して行っています。
ディレクトリ名を指定しないと検索に時間がかかるため、/varの部分は/usrや/rootなどルートディレクトリ上にあるディレクトリ名を入れて検索しています。

また、コンテナ上でなくアルマジロ上でファイル名検索をすると、

/var/lib/containers/storage_readonly/overlay/d80cff6e2a0495ccc836bbd4b8e94246c8affb02e0cf5a16f2855a83b1979992/diff/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
/var/lib/containers/storage_readonly/overlay/d80cff6e2a0495ccc836bbd4b8e94246c8affb02e0cf5a16f2855a83b1979992/diff/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
/var/lib/containers/storage_readonly/overlay/45c9a9153449640605463d4c53841433967cd8e7cc2b3a10adc9022ac58e69eb/diff/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
/var/lib/containers/storage_readonly/overlay/45c9a9153449640605463d4c53841433967cd8e7cc2b3a10adc9022ac58e69eb/diff/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6

というようにコンテナIDが変わるごとにlibsqlite3.soファイルが見つかりました。

佐藤です。

コンテナ内にlibsqlite3-devをインストールして、コンテナ内で以下のようにコマンドを実行したところ、
libsqlite3.so がありました。

root@62633eadb1e1:~# fgrep -Ril "libsqlite3" /usr/lib/aarch64-linux-gnu/ 2> /dev/null
/usr/lib/aarch64-linux-gnu/libsqlite3.so
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6

fgrep のオプションは "-Ril" としてください。

もし、見つからない場合は、正しくインストールされていない可能性があります。
プロジェクトディレクトリ内にある "container/packages.txt" ファイルに
"libsqlite3-dev"が記載されてますでしょうか。

usrディレクトリ内にlibsqlite3.soが見つからなかったので、改めてインストールするとlibsqlite3.soが見つかるようになるのですが、vscodeで「デバッグモードのアプリをArmadilloで実行」を行うとコンテナから自動的に抜けるので、改めてコンテナに入るとコンテナIDが変わっていて、/usr/lib/aarch64-linux-gnu内にlibsqlite3.soがなくなります。
操作点順は以下のとおりです。

root@6f7f621b2898:/# apt install libsqlite3-dev
(インストール処理完了)
root@6f7f621b2898:/# fgrep -Ril "libsqlite3" /usr/lib/aarch64-linux-gnu/ 2> /dev/null
/usr/lib/aarch64-linux-gnu/libsqlite3.so    ⇐libsqlite3.soが見つかる
/usr/lib/aarch64-linux-gnu/libsoup-2.4.so.1
/usr/lib/aarch64-linux-gnu/libsoup-2.4.so.1.11.0
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
root@6f7f621b2898:/# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/lib/aarch64-linux-gnu    ⇐ライブラリのパスを指定
root@6f7f621b2898:/# armadillo:/#    ⇐デバッグモードのアプリをArmadilloで実行すると自動的にコンテナから抜ける
armadillo:/# podman exec -it signageplayer bash
root@717befb8a5fb:/#   ⇐コンテナに入り直すとコンテナIDが変わっている
root@717befb8a5fb:/# fgrep -Ril "libsqlite3" /usr/lib/aarch64-linux-gnu/ 2> /dev/null   
/usr/lib/aarch64-linux-gnu/libsoup-2.4.so.1l    ⇐libsqlite3.soは見つからない
/usr/lib/aarch64-linux-gnu/libsoup-2.4.so.1.11.0
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6

インストール方法が間違っているでしょうか?

また、初心者で申し訳ないのですが、プロジェクトディレクトリ内にある "container/packages.txt" ファイルがどこにあるかがわからないので、パスを教えていただきたいのと、txtファイルの内容の確認方法も教えていただけるとありがたいです。

佐藤です。

> インストール方法が間違っているでしょうか?
コンテナに直接入ってインストールしても、その後コンテナを commit しない限りは、
次にコンテナを起動したとき(デバッグモードのアプリをArmadilloで実行したとき)に元通りになるので消えてしまいます。
なので、必要なパッケージをインストールした状態でコンテナイメージを作成する必要があります。

> また、初心者で申し訳ないのですが、プロジェクトディレクトリ内にある "container/packages.txt" ファイルがどこにあるかがわからないので、パスを教えていただきたいのと、txtファイルの内容の確認方法も教えていただけるとありがたいです。
プロジェクトをVSCodeで開いたときに、VSCodeのファイルエクスプローラー上に
"container"と言う名前のフォルダがあり、その中に"packages.txt"というファイルがあるかと思います。
その"packages.txt"に"libsqlite3-dev"を追記し、その後、「開発版 SWU を生成」を実行し、
できた swu ファイルを armadillo にインストールしてみてください。

> コンテナに直接入ってインストールしても、その後コンテナを commit しない限りは、
> 次にコンテナを起動したとき(デバッグモードのアプリをArmadilloで実行したとき)に元通りになるので消えてしまいます。
> なので、必要なパッケージをインストールした状態でコンテナイメージを作成する必要があります。
> プロジェクトをVSCodeで開いたときに、VSCodeのファイルエクスプローラー上に
> "container"と言う名前のフォルダがあり、その中に"packages.txt"というファイルがあるかと思います。
> その"packages.txt"に"libsqlite3-dev"を追記し、その後、「開発版 SWU を生成」を実行し、
> できた swu ファイルを armadillo にインストールしてみてください。

順番としては、
①packages.txtに"libsqlite3-dev"を追記して「開発版 SWU を生成」を実行し、できた swu ファイルを armadillo にインストール
②signageplayerのコンテナにlibsqlite3-devをインストール
③libsqlite3-devをインストールされたらコンテナをcommit
④ライブラリのパスを /usr/lib/aarch64-linux-gnu に指定してデバッグモードのアプリをArmadilloで実行
でよいでしょうか?

また、packages.txtをみると、

# packages that can be installed with `apt install` are
# listed here line by line and installed in the container.

となっていたのですが、

# packages that can be installed with `apt install` are
# listed here line by line and installed in the container.
# libsqlite3-dev

と追加するだけでよいでしょうか?

佐藤です。

> 順番としては、
> ①packages.txtに"libsqlite3-dev"を追記して「開発版 SWU を生成」を実行し、できた swu ファイルを armadillo にインストール
> ②signageplayerのコンテナにlibsqlite3-devをインストール
> ③libsqlite3-devをインストールされたらコンテナをcommit
> ④ライブラリのパスを /usr/lib/aarch64-linux-gnu に指定してデバッグモードのアプリをArmadilloで実行
> でよいでしょうか?
①だけでよいです。

>

> # packages that can be installed with `apt install` are
> # listed here line by line and installed in the container.
> # libsqlite3-dev
> 

> と追加するだけでよいでしょうか?
libsqlite3-devの先頭の # は不要です。

# packages that can be installed with `apt install` are
# listed here line by line and installed in the container.
libsqlite3-dev

packages.txtに"libsqlite3-dev"を追記して「開発版 SWU を生成」を実行し、できた swu ファイルを armadillo にインストールしたところ、
当該のエラーは出なくなりました。

長期にわたりご対応いただきありがとうございました。