1,动态库版本命名规则
假设有一个动态库:libfooSdk.so.1.1.0,其对应的三个名称如下。
realname:libfooSdk.so.1.1.0
soname:libfooSdk.so.1
linkname:libfooSdk.so
linux的动态库的命名格式是libfooSdk.so.x.y.z
版本号遵循一个规则:
- z: 最后一个z版本的变动一定是兼容的。
- y: y版本升级一般向前兼容。所以这个y和z不能写死。
- x: x版本变动一般是不兼容升级
2,如何在cmakelist中设置动态库的版本后?很简单,一行代码:
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION 1.0.1 SOVERSION 1)
VERSION 对应relname的版本号
SOVERSION 对应soname的版本号
3,三个版本间的链接关系
make编译动态库之后,就会自动生成三个带版本的动态库,执行ll命令查看链接关系:
即:
linkname->soname->realname
在程序链接时只需要在cmakelist链接linkname即可