Linuxでは、ライブラリがインストールされているかどうかを確認するにはどうすればよいですか? (もちろんコマンドラインから)。
私の特定のケースでは、libjpegがインストールされているかどうかを確認したいと思います。
これをディストリビューションに依存しない*方法で行うには、次のようにldconfigをgrepで使用できます。
ldconfig -p | grep libjpeg
Libjpegがインストールされていない場合、出力はありません。インストールされている場合は、使用可能な各バージョンの行が表示されます。
Libjpegを任意のライブラリーに置き換えれば、ライブラリーの可用性を確認するための汎用でディストリビューションに依存しない*方法を使用できます。
何らかの理由でldconfigへのパスが設定されていない場合は、フルパス(通常は/sbin/ldconfig
。
** 99%の時間*
ディストリビューションのパッケージマネージャー(aptitude、yumなど)で確認できますが、ディストリビューションを指定しなかったため、適切なコマンドを実行できません。
別の方法として、gcc -ljpeg
を実行することもできます。「ld:library not found for -ljpeg」が表示された場合、gccがライブラリを検出していないことを意味します(ただし、インストールされていないという意味ではありません)。 「未定義のシンボル: "_main"、参照元:...」のようなものは、libjpegが見つかったことを意味します。
locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg*
は、ライブラリがシステムにインストールされているかどうかを確認する他の方法です
これを確認する方法は他にもたくさんあります。より多くのコンテキスト(libjpegがインストールされているかどうかを確認する必要がある理由)を教えていただければ、特定のケースに最適なソリューションを提供できます。
whereisユーティリティを使用します。
サンプル:
l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la
私はこれを使います:
gcc -lpng
Libをインストールすると、次のようになります。
undefined reference to 'main'
Libがnotがインストールされている場合:
cannot find -lpng
Debベースの配布の場合、次のことができます
dpkg -s packagename
または、ファイル名だけがわかっている場合は、
locate filename
ファイル名は通常libsomething.so [.version]です。
Redhatベースのシステムでは、pkg-configを使用して、ライブラリがインストールされているかどうかを確認できます。多くのrpmバイナリは、インストールを続行する前に実際に同じチェックを行うため、その信憑性に合理的に依存できます。
pkg-config --cflags jpeg
pkg-config --libs jpeg
pkg-config --cflags "jpeg >= 1.0.0" # for version check
pkg-config --modversion jpeg | awk -F. '{ printf "0x%02X%02X%02X\n",$1,$2,$3 }' #version check
これは、常にLinuxの構成ツールによって行われます。
これを見てください autoconfとKDevelop に関するチュートリアル。
他のトリックでは、ldconfig
やdpkg
などのコマンドを使用します。
Dpkgを使用して、インストールされているかどうかを確認することもできます。
dpkg --list | grep [some_key_words_of_your_lib]
さらに、CentOSでは、これを試すことができます。
rpm -qa [lib_name]