Shared libraries or “shared object” files are one of the commonly used file formats when it comes to packaging compiled code.
Take the instance of NCCL, Nvidia Collective Communication Library:
$ ls /usr/local/cuda/lib/
libnccl.so libnccl.so.2 libnccl.so.2.7.8
You must’ve encountered these 3 seemingly same packages after you install nccl on your machine.
Further you could see the linking as:
$ ls -l /usr/local/cuda/lib/
lrwxrwxrwx 1 root root 12 Jun 25 2020 libnccl.so -> libnccl.so.2
lrwxrwxrwx 1 root root 16 Dec 21 16:07 libnccl.so.2 -> libnccl.so.2.7.8
-rwxr-xr-x 1 root root 16025952 Dec 21 16:02 libnccl.so.2.7.8
Ultimately, we have 2 symbolic links to an actual file.
- Fully qualified soname
- Linker name
Realname is the file name containing the actual source code
Realname consists of 3 parts:
soname + period + minor number + period + release number