当前位置: 首页 > news >正文

Windows平台使用cmake 链接动态库


与Unix likes 平台不同 Windows平台上使用cmake 链接动态库有一些特别之处:

Windows平台 cmake构建动态库

《1.即便使用cmake 构建动态库;在Windows平台下导出动态库的函数需要符合Windows编译器规范;否则即便cmake能正常构建动态库;动态库中也是无导出函数或者找不到导出函数的函数体【unix likes 平台 可能没有这方面的要求,因为.so文件中的函数默认都是导出的】

《2.链接动态库与动态库的导入库
1.同一个cmake项目 构建的动态库,被同一个cmake项目的目标程序链接;只需要指定链接动态库时需要搜索目录和链接的目标名称即可【甚至这种情况只需要指定链接目标即可】
link_directories(E:\\TS练习代码\\cmakeTest\\temp\\bin)
target_link_libraries(new hello)

2.如果链接已经的动态库,即外界生成的动态库

#mylib 是链接的目标名称不必与实际链接的文件名称一致
add_library(mylib SHARED IMPORTED)
set_target_properties(mylib PROPERTIES
    IMPORTED_LOCATION "E:\\TS练习代码\\cmakeTest\\temp\\bin\\hello.dll"
    IMPORTED_IMPLIB "E:\\TS练习代码\\cmakeTest\\temp\\lib\\hello.lib"
)

【Windows平台 链接动态库时,实际链接的是动态库的导入库;然后再运行时由动态库的导入库去找真正的函数体;动态库的导入库相当于一个中间层】

对比:
Unix likes 系统下 链接动态库分二种情况
1.同一个cmake项目 构建的动态库,被同一个cmake项目的目标程序链接;只需要指定链接动态库时需要搜索目录和链接的目标名称即可【甚至这种情况只需要指定链接目标即可】
link_directories(E:\\TS练习代码\\cmakeTest\\temp\\bin) 
target_link_libraries(new hello)


2.链接已有的动态库,即链接外界生成的动态库
find_path(MYLIB_INCLUDE_DIR MyLib.h PATHS /path/to/include REQUIRED)
# 查找第三方库的动态库文件【查找外界已有的动态库作为目标,再链接目标】
find_library(MYLIB_LIBRARY MyLib PATHS /path/to/lib REQUIRED)
# 添加可执行文件
add_executable(MyApp src/main.cpp)
# 包含第三方库的头文件目录
target_include_directories(MyApp PRIVATE ${MYLIB_INCLUDE_DIR})
# 链接第三方库
target_link_libraries(MyApp PRIVATE ${MYLIB_LIBRARY})

Unix likes 平台 查找的是动态库本身的路径

Unix likes平台链接动态库时,链接的就是动态库本身


《3.执行时动态库文件,依然需要放在执行程序所在的目录中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 探索分析并发控制的关键作用 — 确保系统稳定与高效的技术导论
  • 前端VUE3框架的快速搭建
  • 【僵尸进程】
  • CSS通过webkit-scrollbar设置滚动条样式
  • 动态内存分配和释放时需要注意哪些问题
  • 链表和STL —— list 【复习笔记】
  • C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索
  • KEPServerEX 如何配置Dcom说明文档
  • 【深度学习量化交易15】基于miniQMT的量化交易回测系统已基本构建完成!AI炒股的框架初步实现
  • 如何手动设置u-boot的以太网的IP地址、子网掩码、网关信息、TFTP的服务器地址,并进行测试
  • 3分钟idea接入deepseek
  • 归并排序 Listnode* vector<int> vector<ListNode*>
  • CentOS-7-x86_64-Minimal-2009 免费下载与使用教程
  • 第二篇:MySQL安装与配置(基于小皮面板(phpstudy))
  • 易飞报错:输入的库位并不存在,请重新输入
  • 基于大数据技术智能教学系统的设计与实现
  • QString是 Qt 框架中的一个核心类,基本用法使用:创建、字符串拼接、截取、查找、替换、分割、大小写转换、比较。
  • 基于ffmpeg+openGL ES实现的视频编辑工具-添加背景音乐(十一)
  • 高速差分信号的布线
  • 【单片机毕业设计14-基于stm32c8t6的智能宠物养护舱系统设计】
  • 三大白电巨头去年净利近900亿元:美的持续领跑,格力营收下滑
  • 解放日报头版聚焦“人民城市”:共建共享展新卷
  • 广东雷州农商行董事长、原行长同日被查
  • 伊朗港口爆炸已致46人死亡
  • 清华姚班,正走出一支军团
  • 怎样更加贴近中国消费者,运动品牌给出“本地化”选择