news 2026/7/1 7:50:11

CMake成果打包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake成果打包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
      • 一、基础必备文件(开发阶段)
      • 二、如果 `mylib` 本身依赖其他库,是否需要额外打包?
        • 1. 依赖“静态库”(`.a`/`.lib`)
        • 2. 依赖“动态库”(`.dll`/`.so`/`.dylib`)
      • 三、完整打包清单(以 Windows 平台为例)
      • 四、示例说明
      • 总结

前言

如果上面生成的mylib为动态库,如果想要拿给其他项目作为第三方库使用,把mylib.dll和mylib.h打包就可以了吗,如果mylib.dll生成本身就需要其他依赖库,那么打包时需要额外打包其他的吗


要将动态库mylib作为第三方库提供给其他项目使用,仅打包mylib.dllmylib.h通常是不够的,具体需要包含的文件及依赖处理规则如下:

一、基础必备文件(开发阶段)

其他项目要编译并链接mylib,至少需要以下文件:

  1. 头文件(mylib.h:包含mylib对外暴露的函数、类、宏等声明,其他项目编译时需要通过#include引用,否则无法知道如何调用mylib的功能。

  2. 动态库文件(mylib.dll:运行时需要加载的实际二进制代码(Windows 平台)。

  3. 导入库文件(mylib.lib,Windows 特有):动态库在编译时会生成对应的导入库(.lib),其他项目在链接阶段需要通过该导入库解析mylib中的符号(函数/变量地址),否则链接会失败。

    注意:Linux 平台的动态库(.so)不需要单独的导入库,链接时直接使用.so文件即可;macOS 平台的动态库(.dylib)也类似。但 Windows 必须依赖.lib导入库才能完成链接。

二、如果mylib本身依赖其他库,是否需要额外打包?

需要分两种情况:

1. 依赖“静态库”(.a/.lib

如果mylib编译时链接了静态库(例如libxxx.axxx.lib),则静态库的代码会被嵌入到mylib.dll(动态库本身包含了静态依赖的代码)。此时,其他项目使用mylib时,不需要额外打包这些静态库(因为依赖已被“合并”到mylib.dll中)。

2. 依赖“动态库”(.dll/.so/.dylib

如果mylib编译时链接了其他动态库(例如xxx.dll),则mylib.dll运行时会动态加载这些依赖的动态库(不会将其代码嵌入自身)。此时,其他项目使用mylib时,必须同时提供这些依赖的动态库,否则会出现“找不到xxx.dll”的运行时错误(例如 Windows 的“缺少xxx.dll”弹窗)。

三、完整打包清单(以 Windows 平台为例)

假设mylib是动态库,且依赖另一个动态库xxx.dll,则提供给其他项目的完整文件应包括:

  • 开发阶段:mylib.h(头文件) +mylib.lib(导入库) +mylib.dll(动态库) + 依赖的xxx.dll(若有动态依赖)。
  • 运行阶段(仅需部署到最终环境):mylib.dll+ 依赖的xxx.dll(若有动态依赖)(头文件和导入库仅开发时需要)。

四、示例说明

假设mylib编译时链接了动态库zlib.dll(压缩库),则:

  • 其他项目开发时,需要mylib.h(编译)、mylib.lib(链接)、mylib.dll(运行)、zlib.dllmylib运行依赖)。
  • 如果只打包mylib.dllmylib.h,其他项目会出现:
    • 链接错误(缺少mylib.lib);
    • 即使手动跳过链接(不可能),运行时会因找不到zlib.dll而崩溃。

总结

  • 基础必备:头文件(.h)、动态库(.dll)、导入库(.lib,Windows 必需)。
  • 动态依赖:若mylib本身依赖其他动态库,必须同时打包这些依赖的动态库,否则无法运行。
  • 静态依赖:无需额外打包(已嵌入mylib.dll)。

因此,分发动态库时,需先明确其依赖链(通过ldd工具(Linux)、dumpbin工具(Windows)或otool工具(macOS)可查看依赖),再完整打包所需文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 15:11:02

Keil5中文乱码调试技巧:项目应用总结

Keil5中文注释乱码?一文讲透根源与实战解决方案在嵌入式开发的日常中,你是否也遇到过这样的场景:刚写完一段逻辑清晰、注释详尽的C代码,满怀信心地打开Keil Vision5(简称Keil5)准备调试,结果——…

作者头像 李华
网站建设 2026/7/1 4:53:28

板对板连接器解决方案:覆盖消费电子、汽车、工业全领域

随着全球电子设备向更高集成度、更强性能演进,板对板连接器作为实现电路板间可靠互连的金桥,其重要性日益凸显。市场数据显示,全球板对板连接器市场预计在2025年达到124.2亿美元,并将在2030年增长至160.5亿美元,展现出…

作者头像 李华
网站建设 2026/6/30 8:25:27

分享一个负载均衡的NDB高可用集群架构+部署详细说明

部署说明: 1个管理节点 :192.168.10.61 2个SQL 节点 :192.168.10.62/63 2个数据节点 :192.168.10.64/65 2个HAProxykeepalived节点:IP:192.168.10.68/69 虚拟 VIP:192.168.10.100 优点 ✅ 业务零改动✅ 自动剔除故障 SQL 节点…

作者头像 李华
网站建设 2026/6/29 12:55:58

工业PLC通信必备的USB转232驱动安装完整指南

工业PLC调试不翻车:USB转232驱动安装实战全解析 你有没有遇到过这样的场景? 现场调试一台老型号的西门子S7-200 PLC,手头只有轻薄本,插上USB转232线后,设备管理器里却死活不显示COM口;或者好不容易识别了…

作者头像 李华
网站建设 2026/6/28 22:46:34

注意力优化与高效推理

一、冗余计算的产生(KV Cache 的诞生背景) Decoder 架构的大模型生成文本时,存在大量重复计算:以输入 “中国的首都是” 为例,模型生成过程是逐 token 自回归的: 输入 “中国的首都”,计算每个 token 的注意力,预测下一个 token “是”; 将 “是” 拼接后,用其 embe…

作者头像 李华
网站建设 2026/6/29 2:34:09

全面讲解二极管分类:按功能划分的实用解析

二极管不只是“单向导电”:从功能到实战的深度拆解你有没有遇到过这样的情况?设计电源时发现效率上不去,排查半天才发现续流二极管压降太高;做信号保护电路时,MCU IO口莫名其妙损坏,结果是TVS响应不够快&am…

作者头像 李华