The shared library soname (cont.)
Here's how to use a soname:
- Specify soname when creating shared library:
- -Wl,-soname,libbar.so instructs linker to mark the shared library libfoo.so with the sonamelibbar.so.
- Create executable:
- Linker detects that libfoo.so contains the soname
- libbar.soand embeds the latter name inside the executable.
- Run the program:
- Dynamic linker cannot find anything named libbar.so.
- Create a symbolic link from the soname to the real name of the library:
$ gcc -fPIC -c -Wall -g mod1.c mod2.c mod3.c
$ gcc -shared -Wl,-soname,libbar.so -o libfoo.so \
mod1.o mod2.o mod3.o
$ gcc -g -Wall -o prog prog.c libfoo.so
$ LD_LIBRARY_PATH=. ./prog
./prog: error in loading shared libraries:
libbar.so: cannot open shared object file:
No such file or directory
$ ln -s libfoo.so libbar.so
$ LD_LIBRARY_PATH=. ./prog
Called mod1-x1
Called mod2-x2
At run-time thislink can point to a version of the library which is different from the version against which linking was performed.