real name libabc.so.1.0.0 (libname.so.major.minor.patch)
soname libabc.so.1 (libname.so.major) --连接时,应用程序中保存的依赖库的名字
link name libabc.so --我们Makefile中使用的是-labc这样的参数。连接时,连接器就会找到libabc.so这个文件,但这个文件实际是一个软连接,指向libabc.so.1.0.0,编译器会把libabc.so.1.0.0截断获得soname libabc.so.1,并最终把soname libabc.so.1保存到应用程序中。
应用程序运行时,首先根据soname libabc.so.1加载libabc.so.1,但这个文件其实也是一个软连接,指向libabc.so.1.0.0,最终加载的是libabc.so.1.0.0这个文件。
如果有不同的两个版本同时存在,libabc.so.1.0.0和libabc.so.2.0.0,那么只需要创建两个软连接libabc.so.1指向libabc.so.1.0.0和libabc.so.2指向libabc.so.2.0.0,这样旧程序仍然使用旧的库,新程序使用新的库。