Sometimes when you try to compile a program in Linux you face the
problem of the shared libraries. It happens when C Linker is not able to locate them in the File System.
Shared libraries are loaded when a program starts.
they include a ".so" as the file extension and are similar to dynamic-link
library or DLL under Windows. There is a convention to name them in
linux:
lib + name of library + .so + version number
for example: libXrender.so.1
The
shared libraries are usually placed in the /usr/lib
(/usr/lib/x86_64-linux-gnu/ for x86 machine in Ubuntu 14.04) or
/usr/local/lib.
If you can not compile a program because some
shared library are not present on your system, you have to first make
sure which library is missing. you can use "ldd" program to prints
shared library dependencies.
$ldd ./libsqlncli-11.0.so.1720.0
libcrypto.so.6 => not found
libodbc.so.1 => /usr/local/lib/libodbc.so.1
libssl.so.6 => not found
The above example tells us that the shared library itself depends on two other libraries which are: libcrypto and libssl.
To resolve this issues we have to make sure which path the linker should
search to find the necessary libraries. To do this, we have to simply
edit file /etc/ld.so.conf. To do so just put this line in the file :
include /etc/ld.so.conf.d/*.conf
it make sure to add all the config files on the directory. We could add
the necessary paths in the file directly but this way is more
convenient.
For the last step just make a new file and add the path of the library. for example:
# vim /etc/ld.so.conf.d/my_odbc.conf
and add this line
/usr/local/lib/
After these steps you have to run the following command as superuser:
#ldconfig
ldconfig configure dynamic linker run-time bindings. It creates the necessary links found in the file /etc/ld.so.conf.
when compiling the program we could also pass the path by using -L
option to announce the shared library ( or static) to the linker. the
shared library (or static) should be announced to the linker. for
example:
gcc –o program program.o –L/usr/lib –lfoo
tells the compiler to look into /usr/lib for libraries and -lfoo options tells the compiler to use a library called libfoo.so.