soname
This article needs additional citations for verification. (July 2014) (Learn how and when to remove this template message) |
In Unix and Unix-like operating systems, a soname is a field of data in a shared object file.[1] 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
.
Name
The soname is often used to provide version backwards-compatibility information.[2] For instance, if versions 1.0 through 1.9 of the shared library libx
provide identical interfaces, 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.[3]
If the application binary interface (ABI) of a library changes in a backward-incompatible way, 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
SONAME libx.so.1
See also
References
- ↑ Wheeler, David (2003-04-11). "Program Library HOWTO". tldp.org. Retrieved 2021-01-04.
- ↑ Staerk, Thorsten (2011-03-25). "Library-related Commands and Files: soname". LinuxQuestions.org. Retrieved 2018-02-07.
- ↑ Bansal, Ashish (2001-04-01). "Shared objects for the object disoriented: How to write dynamically loadable libraries". IBM DeveloperWorks. Retrieved 2018-02-07.