related to shared libraries, .so files and their manipulation in Ubuntu
Shared libraries are distributed as .so
files in /usr/lib/
. These files are are compiled code which is intended to be shared among several different programs.
A library exports symbols which are the compiled versions of functions, classes and variables. A library has a name called an SONAME which includes a version number. This SONAME version does not necessarily match the public release version number. A program gets compiled against a given SONAME version of the library. If any of the symbols is removed or changes then the version number needs to be changed which forces any packages using that library to be recompiled against the new version. Version numbers are usually set by upstream and Ubuntu follows them in our binary package names called an ABI number, but sometimes upstream do not use sensible version numbers and packagers have to keep separate version numbers.
Libraries are usually distributed by upstream as standalone releases. Sometimes they are distributed as part of a program. In this case they can be included in the binary package along with the program (this is called bundling) if you do not expect any other programs to use the library, more often they should be split out into separate binary packages.
The libraries themselves are put into a binary package named libfoo1
where foo
is the name of the library and 1
is the version from the SONAME. Development files from the package, such as header files, needed to compile programs against the library are put into a package called libfoo-dev
.
- Visit the extract's source.