CMake中动态库的版本号

通常使用makefile编译,不是很关注so的版本号。但是最近公司的部分核心代码开源,切换成CMake编译时,就涉及到这一点。

设置cmake的编译目标

SET_TARGET_PROPERTIES(taos PROPERTIES VERSION 1.6.0.0 SOVERSION 1)

此时,会生成三个文件

libtaos.so -> libtaos.so.1*
libtaos.so.1 -> libtaos.so.1.6.0.0*
libtaos.so.1.6.0.0

其中,libtaos.so.1.6.0.0为动态库的文件名(realname),libtaos.so.1为动态库的别名(soname),libtaos.so为动态库的链接名(linkname)。

在makefile中-ltaos时,makefile会寻找libtaos.so,然后将libtaos.so.1写入到可执行文件的链接信息中,makefile类似这样

LFLAGS = '-Wl,-rpath,/usr/local/lib/taos/' -ltaos -lpthread -lm -lrt

编译之后的可执行文件,其链接库如下

ubuntu@ubuntu:~/work/op/tests/examples/c$ ldd demo
        linux-vdso.so.1 =>  (0x00007ffe3c8b1000)
        libtaos.so.1 => /usr/local/lib/taos/libtaos.so.1 (0x00007f0bd4d3c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0bd495b000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0bd473e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0bd4434000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0bd422c000)
        /lib64/ld-linux-x86-64.so.2 (0x000055868fbdf000)

这样,当动态库版本升级到libtaos.so.1.6.0.1时,已经编译好的可执行文件会自动寻找libtaos.so.1,最后使用libtaos.so.1.6.0.1。

当然,您还可能需要在编译时自动生成版本号,那么就可以使用cmake的变量来完成,参考如下代码

execute_process(COMMAND get_version.sh OUTPUT_VARIABLE VERSION_INFO)
MESSAGE(STATUS "${VERSION_INFO}")
SET_TARGET_PROPERTIES(taos PROPERTIES VERSION ${VERSION_INFO} SOVERSION 1)
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值