soname
In Unix and Unix-like operating systems, a soname is a field of data in a shared object file. The soname is a string, which is used as a "logical name" describing the functionality of the object
(typically, that name is equal to the filename of the library, or to a prefix thereof, e.g. libc.so.6
).
The soname is often used to provide version backwards-compatibility information. For instance, if versions 1.0 through 1.9 of the shared library libx
provide identical interface, they would all have the same soname, e.g. libx.so.1
. If the system only includes version 1.3 of that shared object, with filename libx.so.1.3
, the soname field of the shared object tells the system that it can be used to fill the dependency for a binary which was originally compiled using version 1.2.
If the application binary interface (ABI) of a library changes in such a way that the dependent programs would be broken, the soname would be incremented, e.g. from libX.so.5
to libX.so.6
.
The GNU linker uses the -hname
or -soname=name
to specify the library name field. Internally, the linker will create a DT_SONAME
field and populate it with name
.
Given any shared object file, one can use the following command to get the information from within the library file using objdump:
objdump -p libx.so.1.3 | grep SONAME
See also
References
External links
- linuxquestions.org wiki
- System V ABI (4.1)
- Libtool's versioning scheme
- IBM developerWorks article "Shared objects for the object disoriented!" covering shared libraries including naming conventions.