Cmake找不到动态链接库

第一次写cmakelist,一直报错,分享一下一些心得

1、检查路径问题,可以使用message方法看看自己链接的地址有没有问题

message(STATUS "CMAKE_SOURCE_DIR is ${CMAKE_SOURCE_DIR}")

2、在Cmakelist.txt里面add_executable必须出现在link_directories之后,不然会导致无法链接到动态库

所以可以检查一下add_executable是不是写在前面了

3、如果 link_directories 未生效,可以直接通过设置 CMAKE_EXE_LINKER_FLAGS,将库路径强制传递给链接器:在你的 CMakeLists.txt 中添加以下内容:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SOURCE_DIR}/xxx/build/lib -L${CMAKE_SOURCE_DIR}/xxx-runtime/build/install")

### 如何使用 CMake 创建动态链接库 创建动态链接库的过程可以通过配置 `CMakeLists.txt` 文件实现。以下是关于如何通过 CMake 生成动态链接库的关键步骤及其解释。 #### 配置 CMakeLists.txt 的基本结构 为了生成动态链接库,需要在 `CMakeLists.txt` 中定义项目的基本信息以及指定目标类型为 `SHARED`。以下是一个典型的例子: ```cmake cmake_minimum_required(VERSION 2.6) # 指定所需的最低 CMake 版本[^4] project(example_project) # 定义项目的名称 # 添加头文件目录以便编译器能够到头文件 include_directories(include) # 设置包含路径 # 收集源文件到变量中 aux_source_directory(src SRC_LIST) # 自动收集 src 目录下的所有源文件 # 声明要生成的动态链接库 add_library(my_dynamic_lib SHARED ${SRC_LIST}) # 使用 SHARED 关键字声明动态[^3][^5] # 如果存在依赖项,则需将其链接至当前 target_link_libraries(my_dynamic_lib dependency1 dependency2) # 连接其他依赖[^2] ``` 上述代码片段展示了如何通过 CMake 来生成一个名为 `my_dynamic_lib` 的动态链接库,并指定了其所需依赖关系。 #### 动态类型的说明 当使用 `add_library` 函数时,必须明确指出所创建的目标是何种类型的。对于动态链接库而言,应选用关键字 `SHARED`。此外还有两种常见选项: - **STATIC**: 表示静态。 - **MODULE**: 类似于动态但在某些平台上不支持 dyld 加载机制的情况下会被视为共享处理[^5]。 #### 输出路径设定 如果希望自定义生成后的动态链接库存储位置,可以在脚本里加入如下命令行语句来调整默认行为: ```cmake set(LIBRARY_OUTPUT_PATH /desired/path/to/output/libs/) # 设定最终产物存放地址 ``` 此操作允许开发者灵活控制构建成果的具体落地点,从而便于后续集成测试或部署流程管理。 #### 总结 综上所述,借助 CMake 工具链完成动态链接库制作主要涉及以下几个方面的工作:确定合适的最小兼容版本号;命名整个工程项目;引入必要的开发资源(比如 .h 头档);搜集实际参与编译过程中的 c/cpp 实现单元集合起来作为输入素材交给 add_library 方法调用——记得标注成 SHARE 形式哦!最后别忘了考虑可能存在的第三方关联模块也要一并纳入进来形成完整的依赖链条才行[^1]-。 ```python print("Dynamic library created successfully!") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yw408

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

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

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

打赏作者

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

抵扣说明:

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

余额充值