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

普通链接与whole-archive方式

让我解释一下 -Wl,--whole-archive -lxixihaha -Wl,--no-whole-archive 和直接使用 target_link_libraries 的区别:

  1. 普通链接(target_link_libraries):
  • 链接器只会链接那些被实际引用到的符号
  • 如果某个目标文件中的符号没有被其他地方引用,这个符号就不会被链接进来
  • 这是默认的链接行为,可以减小最终可执行文件的大小
  1. --whole-archive 方式:
  • --whole-archive 告诉链接器必须包含库中的所有目标文件,而不管这些符号是否被引用
  • 所有符号都会被强制链接进来,即使没有被引用
  • -Wl,--no-whole-archive 用于关闭这个选项,使后续的库回到普通链接模式

在您的项目中:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--whole-archive -lxixihaha -Wl,--no-whole-archive")

这行代码的意思是:

  1. -Wl,--whole-archive:开启完整归档模式
  2. -lxixihaha :链接 lxixihaha 库,此时会链接其中所有符号
  3. -Wl,--no-whole-archive:关闭完整归档模式

这种方式通常用于以下场景:

  1. 当库中包含一些初始化函数,这些函数虽然没有被显式调用,但需要在运行时执行
  2. 当使用了一些通过注册机制工作的模块,这些模块的符号可能没有直接引用
  3. 在嵌入式系统中,某些中断向量表或设备驱动需要完整保留

所以在您的项目中:

  • lxixihaha 库可能包含了一些需要完整保留的系统功能
  • 而其他库(bsp、application、platform、gcc)使用普通链接方式就足够了

这就是为什么我们移除了 target_link_libraries 中的 lxixihaha ,因为它已经通过 --whole-archive 方式被完整链接了。如果同时使用两种方式,可能会导致符号重复或链接错误。

相关文章:

  • Java 8 Stream API:传统实现和流式编程的范式对比
  • Java基础编程练习第33题-有序数组插入元素
  • 【嵌入式】ESP_01S智能家居:可二次开发式智能灯控/门禁,勾勒智能生活新图景
  • 基于Python pyscard库采集ACS ACR122U NFC读卡器数据的详细操作步骤
  • AI日报 - 2025年3月18日
  • java,poi,提取ppt文件中的文字内容
  • Launcher3 Hotseat区域动态插入All Apps按钮实现方案
  • 理解Akamai EdgeGrid认证在REST API中的应用
  • 数字孪生概念及示例【清晰易懂】
  • 【并发编程】synchronized 的底层原理
  • 微服务》》Kubernetes (K8S)安装
  • go语言学习教程推荐,零基础到做项目
  • 【JavaScript】一、JS的引入与输入输出
  • 0基础 | 直流稳压电源专题3
  • 牛客竞赛记录——小紫的优势博弈(Python3题解)
  • CentOS 7 更换 YUM 源为国内
  • 高中信息技术学科核心素养评价体系的构建与实践研究
  • RESTful API 简介与使用
  • 数据结构——排序
  • 【探寻C++之旅】第九章:二叉搜索树
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 张涌任西安市委常委,已卸任西安市副市长职务
  • 盛和资源海外找稀土矿提速:拟超7亿元收购匹克,加快推动坦桑尼亚项目
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额5万元
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我