You need to enable JavaScript to run this app. Linker Scripts(链接脚本)能否在多个段中指定*(COMMON)?
优惠活动
大模型
产品
解决方案
定价
更多

Linker Scripts(链接脚本)能否在多个段中指定*(COMMON)?

结论:该写法不可行,无法实现两个段都包含COMMON符号的预期效果

原因说明:

  • 首先明确GNU链接器(ld)的核心匹配规则:所有输入符号/输入段只会被分配到第一个匹配到它的输出段中,不会重复分配到多个输出段
  • COMMON符号对应的是C/C++中未初始化的全局变量,这类符号编译阶段不会直接放到.bss段,而是暂时标记为COMMON类型,等待链接阶段分配段地址
  • 你给出的链接脚本中.bss段的定义顺序在.newsect之前,且.bss中已经写了*(COMMON)匹配所有目标文件的COMMON符号,所有COMMON符号都会被先匹配到.bss段中,后续.newsect中的*(COMMON)不会匹配到任何符号,完全不生效
  • 如果你有把部分COMMON符号放到自定义段的需求,需要调整匹配逻辑:比如要将foo.o中的COMMON符号放到.newsect,需要把.newsect的定义放到.bss前面,在.newsect中写foo.o(COMMON)精准匹配特定目标文件的COMMON符号,再在.bss中写*(COMMON)匹配剩下的所有COMMON符号,才能实现分段效果。

内容的提问来源于stack exchange,提问作者Ryan Murphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:24:03