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

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.执行时动态库文件,依然需要放在执行程序所在的目录中

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


http://www.kler.cn/a/558991.html

相关文章:

  • 【SpringBoot教程】SpringBoot整合Caffeine本地缓存及Spring Cache注解的使用
  • 深入解析JVM垃圾回收机制
  • ASP.NET MVC 下载文件
  • Flutter最简单的路由管理方式Navigator
  • Windows11安装GPU版本Pytorch2.6教程
  • C进阶 自定义类型
  • mac 下 java 调用 gurobi 不能加载 jar
  • verilog测试平台设计与verilog的synthesis
  • 使用 CloudDM 和飞书流程化管理数据库变更审批
  • Swift Data 切片:data.subdata(in:) vs data[Range<Index>] 深度解析
  • 03 二层广播和三层广播
  • 进程概念、PCB及进程查看
  • MusicGPT的本地化部署与远程调用:让你的Windows电脑成为AI音乐工作站
  • 高性能GPU计算:释放计算潜力的加速利器
  • 基于拼接的宏基因组全流程
  • Day1 初识AndroidAudio
  • OpenSSL实验
  • 网络安全研究
  • Python常用的函数和功能
  • 黑马点评 面试话术