環境構築を行っていると以下のような、エラーに出会うことが多い

エラー:
error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

内容としては、なにかシステムがライブラリを必要としているが、そんなファイルやディレクトリは見つからないよ~といった旨のエラーとなっている。

足りないならインストールしてくるほかないが、ここで「sudo apt install libtinfo.so.5」のように無いよと言われているライブラリ名を直接指定すると、下のようになる。

結果:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libtinfo.so.5
E: Couldn't find any package by glob 'libtinfo.so.5'

足りないと言われたライブラリを、言われた通りにそのままインストールしようとしたにも関わらず、そんな名前のものはみつからない!と言われてしまう。

Linux環境初心者的には、ここでどうすればいいか毎回分からなくなるので、aptでインストールしてくる対象となる、足りないライブラリを含むパッケージの見つけ方について、探し方のメモ



対象ライブラリを含むパッケージの見つけ方



aptの使えるUbuntu環境であれば「apt search」や「apt-cache search」コマンドを使うことで、おおよそ特定のライブラリを含むパッケージを見つけることができる。CentOSなどのパッケージ管理にyum用いる環境ではおそらく「yum search」などが同等のもの。

パケージの探し方の例1


先ほどの「libtinfo.so.5」を見つける方法を例に挙げると

コマンド:
$ apt search libtinfo

このようなライブラリ名の特徴的な一部を含むコマンドを用いることで「libtinfo」という文字を含むそれっぽいパッケージの一覧が以下のように表示される。また、「apt-cache search libtinfo」で探しても良い。

実行結果:
Sorting... Done
Full Text Search... Done
libtinfo-dev/jammy-updates,jammy-security 6.3-2ubuntu0.1 amd64
  transitional package for libncurses-dev

libtinfo5/jammy-updates,jammy-security,now 6.3-2ubuntu0.1 amd64 [installed]
  shared low-level terminfo library (legacy version)

libtinfo6/jammy-updates,jammy-security,now 6.3-2ubuntu0.1 amd64 [installed,automatic]
  shared low-level terminfo library for terminal handling

この中で名前や説明的に、「libtinfo5」という名前のパッケージが「libtinfo.so.5」を含んでいそうだと見つけることができる。

ここまで絞り込んだあとは、経験上、それっぽいと思ったものが十中八九探しているパッケージだが、確実性を持たせたいときは、「apt show」コマンドなどを用いて各パッケージの詳細を見ることで内容を確認することができる。

コマンド:
$ apt show -a libtinfo5

結果:
Package: libtinfo5
Version: 6.3-2ubuntu0.1
Priority: optional
Section: universe/libs
Source: ncurses
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Craig Small 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 557 kB
Depends: libc6 (>= 2.33)
Homepage: https://invisible-island.net/ncurses/
Download-Size: 100 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages
Description: shared low-level terminfo library (legacy version)
 The ncurses library routines are a terminal-independent method of
 updating character screens with reasonable optimization.
 .
 This package contains the legacy version of the shared low-level
 terminfo library.

Package: libtinfo5
Version: 6.3-2
Priority: optional
Section: universe/libs
Source: ncurses
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Craig Small 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 553 kB
Depends: libc6 (>= 2.33)
Homepage: https://invisible-island.net/ncurses/
Download-Size: 99.2 kB
APT-Sources: http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
Description: shared low-level terminfo library (legacy version)
 The ncurses library routines are a terminal-independent method of
 updating character screens with reasonable optimization.
 .
 This package contains the legacy version of the shared low-level
 terminfo library.

ここで、パッケージの内容を精査してみるとどんなライブラリを含むのかなどを知ることができる。

最終的には、ここで見つかったパケージをいつものようにインストールする。

コマンド:
$ sudo apt install libtinfo5

これで、「/usr/lib/」以下や「/usr/lib/x86_64-linux-gnu/」以下にlibtinfo.so.5を見つけることができるようになり、「libtinfo.so.5」ファイルが見つからないといった旨のエラーは出なくなる

エラーの出ていたアプリケーションの実行で、このような手順で足りないものをインストールしていくことで、少なくともライブラリの足りないと言われているようなエラーについては解決できるはずである。


パケージの探し方の例2


つぎに音声の入出力を行うようなアプリケーションに用いられる「portaudio」というライブラリを同じように探してみる。

コマンド:
$ apt search portaudio

結果:
Sorting... Done
Full Text Search... Done
baresip/jammy 1.0.0-4build4 all
  portable and modular SIP user-agent - metapackage

baresip-core/jammy 1.0.0-4build4 amd64
  portable and modular SIP user-agent - core parts

baresip-ffmpeg/jammy 1.0.0-4build4 amd64
  portable and modular SIP user-agent - FFmpeg codecs and formats

baresip-gstreamer/jammy 1.0.0-4build4 amd64
  portable and modular SIP user-agent - GStreamer pipelines

baresip-gtk/jammy 1.0.0-4build4 amd64
  portable and modular SIP user-agent - GTK+ front-end

baresip-x11/jammy 1.0.0-4build4 amd64
  portable and modular SIP user-agent - X11 features

hydrogen/jammy 1.1.1+52.gb917e057-1 amd64
  advanced drum machine/step sequencer

libportaudio-ocaml/jammy 0.2.2-1build1 amd64
  OCaml bindings for the portaudio library -- runtime files

libportaudio-ocaml-dev/jammy 0.2.2-1build1 amd64
  OCaml bindings for the portaudio library -- development files

libportaudio2/jammy 19.6.0-1.1 amd64
  Portable audio I/O - shared library

libportaudiocpp0/jammy 19.6.0-1.1 amd64
  Portable audio I/O C++ bindings - shared library

mpg123/jammy 1.29.3-1build1 amd64
  MPEG layer 1/2/3 audio player

portaudio19-dev/jammy 19.6.0-1.1 amd64
  Portable audio I/O - development files

portaudio19-doc/jammy 19.6.0-1.1 all
  Portable audio I/O - documentation

python-pyaudio-doc/jammy 0.2.11-1.3ubuntu1 all
  Documentation for Python bindings for PortAudio v19

python3-pyaudio/jammy 0.2.11-1.3ubuntu1 amd64
  Python3 bindings for PortAudio v19

squeezelite-pa/jammy 1.9.9-1395+git20220104.874e4f9-1 amd64
  lightweight headless Squeezebox emulator - PortAudio version

先ほどと違い、かなりたくさん出てきたが39行目「portaudio19-dev」というパッケージが、説明文を読む限り「development files」となっており、開発に用いられる、あるいは、portaudioを用いているアプリケーションの実行に用いられるものだと予想がつくため、これが必要なファイルだということがなんとなく分かる。

これをインストールすることで、portaudioのライブラリが使えるようになる。





以上、いきなりライブラリが足りないと言われた場合の対処方法でした。ある程度名前からそれっぽいものを見つけることができる"慣れ"が必要になる気がします。

最近であれば、ChatGPTなどを用いることで対象ライブラリを含むパッケージを明示してくれたりもするので便利で併用することもあります。ただし、間違いも多かったり、その間違いを出力する脆弱性を利用したウイルスを含むパッケージをインストールさせるような攻撃方法があるなどとも聞くので、結局、自分で精査することは必要になりそうです。

以上、ありがとうございました。

このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット