cmake编译带版本的动态库以及链接不带版本的库

本文介绍了如何使用CMake编译带版本号的动态库,并解决链接时不带版本号的问题。通过设置SOVERSION和目标名,以及在编译后重命名和创建软链接,确保可执行文件正确链接到期望的库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人博客 https://juejin.cn/user/176366088104638 和 http://blog.wuzhenyu.com.cn

cmake 编译动态库和链接动态库

cmake 中,通过 add_library 的方式,来设置编译目标,编译结果为动态库或者静态库

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])

name 就是目标名,即 target_name。目标名称,在 cmake 中是一个很特殊的存在,特殊在哪里呢,后面我一点点展开说明。

上面的参数中,STATIC 表示目标为静态库,而 SHARED 表示为动态库。

我们来看一个例子,例子很简单,就是实现一个 output 打印接口,编译成动态库 liboutput.so,然后通过链接这个动态库的方式调用 output 方法,打印 Hello World 到屏幕上,我们来看一下目录结构

├── CMakeLists.txt
├── demo
│   ├── CMakeLists.txt
│   └── helloworld.cpp
├── output.cpp
├── output.h

根目录中的 CMakeLists.txt 文件为

project(test)

add_library(output SHARED output.cpp)
set(LIB_OUTPUT_DIR "${PROJECT_SOURCE_DIR}/dist")
set_target_properties(output
  PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
  ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
  )

add_subdirectory(demo)

为了方便,我们通过 set_target_properties 将动态库编译后,存放到根目录下的 dist 文件夹中,${PROJECT_SOURCE_DIR} 这个变量所代表的目录,跟 project 有关,表示的是指定了 project 的目录作为源代码路径,也就是 ${PROJECT_SOURCE_DIR} 这个变量的值。

demo/CMakeLists.txt 为<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫步旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值