233

In Linux, how do I check if a library is installed or not? (from the command line of course).

In my specific case now, I want to check whether libjpeg is installed.

1
  • What distribution are you using ? Commented Aug 16, 2009 at 16:09

10 Answers 10

313

To do this in a distro-independent* fashion you can use ldconfig with grep, like this:

ldconfig -p | grep libjpeg 

If libjpeg is not installed, there will be no output. If it is installed, you will get a line for each version available.

Replace libjpeg by any library you want, and you have a generic, distro-independent* way of checking for library availability.

If for some reason the path to ldconfig is not set, you can try to invoke it using its full path, usually /sbin/ldconfig.

**99% of the times*

13
  • 2
    This should be accepted as the answer. Great! Commented Dec 19, 2013 at 13:53
  • 1
    Except for NixOS :-( Commented Apr 16, 2015 at 18:34
  • 2
    Can you specify 99% times? bash: ldconfig: command not found on Debian x64 Jessie with xfce! This is the recomended debian release on the debian website... Commented Oct 12, 2015 at 13:46
  • 5
    @TomášZato: ldconfig is not available (command not found shows up) if you try to run it without being superuser. Commented Aug 29, 2016 at 9:01
  • 2
    /sbin/ldconfig -p works for me without needing to be root. Commented Nov 9, 2016 at 4:12
36

You can check with the package manager of your distribution (aptitude, yum, ...) but as you did not give your distribution I can't give you the right command.

Another way can be to run gcc -ljpeg, if you get 'ld: library not found for -ljpeg' it means that gcc has not found the library (but it don't mean that it's not installed), if you get something like 'Undefined symbols: "_main", referenced from: ...' it means that libjpeg has been found.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* are some other way to find if the lib in installed in the system

There are many other ways to check that, if you give us more context (why you need to check if libjpeg is installed) we could give you the best solution for your specific case.

0
20

I use the whereis utility.

Sample:

l1feh4ck3r@xxx:~$ whereis libjpeg libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la 
0
18

I use this:

gcc -lpng 

When the lib is installed, it yields:

undefined reference to 'main' 

When the lib is not installed:

cannot find -lpng 
2
  • This one is short and usefull Commented Jul 23, 2023 at 11:16
  • Thanks, another answer gave me a positive result, but this gave me a negative one.... Suppose you're trying to install something from source rpm (say x:s) (of which this q is one of several I encountered), and this pkg has dependencies which I choose the binary version to install (say y:b, z:b, w:b). If w,y, or z depends on x:b as well..... it's easier let it install, that's what I needed to do. Downloading and installing rpm manually without dependency checking didn't work for me. Commented Aug 10, 2023 at 8:47
16

For deb-based distribution you can do

dpkg -s packagename 

Or if you know the filename only, use

locate filename 

The filename is usually libsomething.so[.version].

4
  • 1
    The filename can also be something like "libsomething.a" for static version. Commented Aug 16, 2009 at 16:40
  • I find dpkg -s limited in utility, because it wants the actual package name, which may differ subtly or significantly from the library itself. I use dpkg -s|grep LIBRARY Commented Aug 16, 2009 at 16:41
  • 2
    @dinomite apt-file is your friend :) Commented Aug 16, 2009 at 16:50
  • @DrewStephens doing that gives dpkg-query: error: --status needs at least one package name argument Commented Apr 19, 2021 at 5:37
8

On Redhat based systems, one can use pkg-config to verify if a library is installed or not. Many rpm binaries actually make the same checks before proceeding with installation, so we can reasonably rely on its veracity.

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 
0
2

This is done by configuration tools on linux all the time.

Look at this Tutorial about autoconf and KDevelop.

Other tricks would use commands like ldconfig and dpkg.

2

On Ubuntu 20.04, I am able to display a wealth of relevant information for a package using aptitude.

% aptitude show libssl-dev Package: libssl-dev Version: 1.1.1f-1ubuntu2.1 State: installed Automatically installed: no Multi-Arch: same Priority: optional Section: libdevel Maintainer: Ubuntu Developers <[email protected]> Architecture: amd64 Uncompressed Size: 8,006 k Depends: libssl1.1 (= 1.1.1f-1ubuntu2.1) Suggests: libssl-doc Conflicts: libssl1.0-dev Breaks: libssl-dev:i386 (!= 1.1.1f-1ubuntu2.1) Replaces: libssl-dev:i386 (< 1.1.1f-1ubuntu2.1) Description: Secure Sockets Layer toolkit - development files This package is part of the OpenSSL project's implementation of the SSL and TLS cryptographic protocols for secure communication over the Internet. It contains development libraries, header files, and manpages for libssl and libcrypto. Homepage: https://www.openssl.org/ 

To find which package would provide a particular file I have found apt-file very useful - some instructions are here: https://linuxhint.com/find_which_package_contains_specific_file_ubuntu/

% apt-file search 'libjpeg.so' darktable: /usr/lib/x86_64-linux-gnu/darktable/plugins/imageio/format/libjpeg.so libjpeg-turbo8: /usr/lib/x86_64-linux-gnu/libjpeg.so.8 libjpeg-turbo8: /usr/lib/x86_64-linux-gnu/libjpeg.so.8.2.2 libjpeg-turbo8-dev: /usr/lib/x86_64-linux-gnu/libjpeg.so libjpeg62: /usr/lib/x86_64-linux-gnu/libjpeg.so.62 libjpeg62: /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0 libjpeg62-dev: /usr/lib/x86_64-linux-gnu/libjpeg.so libjpeg9: /usr/lib/x86_64-linux-gnu/libjpeg.so.9 libjpeg9: /usr/lib/x86_64-linux-gnu/libjpeg.so.9.4.0 libjpeg9-dev: /usr/lib/x86_64-linux-gnu/libjpeg.so libxine2-misc-plugins: /usr/lib/x86_64-linux-gnu/xine/plugins/2.7/xineplug_decode_libjpeg.so nsight-systems: /usr/lib/nsight-systems/Host-x86_64/libjpeg.so.8 
1

You can also try using dpkg to check whether it is installed.

dpkg --list | grep [some_key_words_of_your_lib]

Besides, on CentOS, you can try this.

rpm -qa [lib_name]

2
  • Note: Will work only for Debian based distros Commented Oct 25, 2018 at 21:33
  • @ALex_hha Yes, thank you, this should be emphasized. On CentOS or red hat based systems, use pkg-config instead. Commented Oct 31, 2018 at 9:23
0

as per Kim above

dpkg -s packagename

[[ $(dpkg -s libsox-fmt-pulse 2> /dev/null) =~ "is not installed" ]] && sudo apt install libsox-fmt-pulse # for hdmi output 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.