====== Ubuntu - Programs - Program can't find Shared Library at run-time ======
Error received when trying to run a program, such as **error while loading shared libraries**.
Symlinks on libraries work fine, as long as the final target they trace to exists and is accessible.
Possible solutions include:
* Create a symlink to the library path.
* Copy the library file to a directory listed in /etc/ld.so.conf.
* Add the directory containing the library files to /etc/ld.so.conf.
* Update the **LD_LIBRARY_PATH** environment variable.
* Recompile program statically.
After any of the first 3, rerun **ldconfig** so the linker cache is updated. You can then run **ldconfig -v** to verify it's resolvable.
----
===== Create a symlink to the library path =====
Create a symlink to the library path in a directory listed in /etc/ld.so.conf (or /lib or /usr/lib).
Assuming that the library file is named libxyz.so and that /usr/local/lib is one of the directories listed in /etc/ld.so.conf.
Then
ln -s libxyz.so /usr/local/lib/libxyz.so
Then update the linker cache.
ldconfig
The runtime linker (usually /lib/ld.so or /lib/ld-linux.so with some version number in it) checks all of its configured directories for the library, and then links them in every time the program starts.
Now run the program.
----
===== Copy the library file to a directory listed in /etc/ld.so.conf =====
Copy the library file to a directory listed in /etc/ld.so.conf (or /lib or /usr/lib) (defaults).
Assuming that the library file is named libxyz*
cat /etc/ld.so.conf
displays
include /etc/ld.so.conf.d/*.conf
Some Linux systems have the /etc/ld.so.conf file point directly to some directories, such as /usr/local/lib. Ubuntu however references a seperate directory /etc/ld.so.conf.d where is reads in any *.conf file. Simply create a new confile file with an extension ending in **.conf**. Populate this file with the path that contains the library file.
Then update the linker cache.
ldconfig
The runtime linker (usually /lib/ld.so or /lib/ld-linux.so with some version number in it) checks all of its configured directories for the library, and then links them in every time the program starts.
Now run the program.
----
===== Add the directory containing libxyz* to /etc/ld.so.conf =====
Add the directory containing libxyz* to /etc/ld.so.conf.
vi /etc/ld.so.conf
and add this line
/directory/where/libxyz* exists
Then update the linker cache.
ldconfig
The runtime linker (usually /lib/ld.so or /lib/ld-linux.so with some version number in it) checks all of its configured directories for the library, and then links them in every time the program starts.
Now run the program.
----
===== Update your **LD_LIBRARY_PATH** environment variable =====
Add the directory containing the library files (or symbolic link) to your **LD_LIBRARY_PATH** environment variable.
set LD_LIBRARY_PATH=/directory/path/to/libxyz*
Now run the program.
----
===== Recompile program statically =====
It will work, but don't bother.