Did you get an error message “error while loading shared libraries: libpng16.so.16: cannot open shared object file” while trying to install or build an application on Ubuntu, Debian, CentOS/RHEL or Amazon Linux system that depends on libpng library?. libpng is the official extensible PNG reference library that supports almost all PNG features, and has been extensively tested for over 23 years.

You can easily install libpng by building from source on a Linux system. I’ll be performing the installation to fix “error loading shared libraries: libpng16.so.16: cannot open shared object file” on a CentOS 7 system. But first we’ll need to install build tools.

# CentOS / Amazon Linux / Oracle Linux
sudo yum -y groupinstall "Development Tools"

# Ubuntu / Debian
sudo apt-get update
sudo apt-get install build-essential

Confirm make and gcc tools are installed.

$ gcc --version
gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-12)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ make --version
GNU Make 3.82
Built for x86_64-koji-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Then download the latest release of libpng from sourceforge.

wget https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.gz

Extract the file once downloaded:

tar xvf libpng-1.6.37.tar.gz

Run the configure command inside the directory created after file extraction.

cd libpng-1.6.37/
./configure

Run make command after success in the previous command execution.

make

Finally install libpng library in your Linux system.

$ sudo make install

Here is my successful installation message.

....
make  install-data-hook
make[3]: Entering directory `/home/ec2-user/libpng-1.6.37'
+ cd /usr/local/include
+ for f in pnglibconf.h png.h pngconf.h
+ rm -f pnglibconf.h
+ ln -s libpng16/pnglibconf.h pnglibconf.h
+ for f in pnglibconf.h png.h pngconf.h
+ rm -f png.h
+ ln -s libpng16/png.h png.h
+ for f in pnglibconf.h png.h pngconf.h
+ rm -f pngconf.h
+ ln -s libpng16/pngconf.h pngconf.h
+ cd /usr/local/lib/pkgconfig
+ rm -f libpng.pc
+ ln -s libpng16.pc libpng.pc
make[3]: Leaving directory `/home/ec2-user/libpng-1.6.37'
make[2]: Leaving directory `/home/ec2-user/libpng-1.6.37'
make[1]: Leaving directory `/home/ec2-user/libpng-1.6.37'

After installation you should be able to locate libpng16.so.16 file.

$ sudo find / -name libpng16.so.16
/usr/local/lib/libpng16.so.16
/home/ec2-user/libpng-1.6.37/.libs/libpng16.so.16

You can then continue to build the application that depends on libpng library.

More guides on our website:

How To Manage Applications on Linux Using Bauh

Install Kotlin Programming Language on Linux Mint | Ubuntu

Monitor Websites & Applications Uptime With Statping

How To Install and Use Nu Shell on Linux