You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在链接器脚本(.ld文件)的SECTIONS区块中引入子脚本?报错“malformed number: dwarf.ld”排查

在SECTIONS区块内使用INCLUDE指令的问题分析

首先明确:你的用法是完全符合GNU ld文档规范的——INCLUDE指令确实可以放在SECTIONS区块内部,甚至是单个输出段的定义里。你遇到的malformed number: dwarf.ld报错,本质是ld在解析脚本时出现了语法误解,下面是具体的排查方向:

1. 主脚本中INCLUDE前的语法未正确闭合

ld对SECTIONS区块内的语法格式要求非常严格,如果INCLUDE dwarf.ld前的代码存在语法不完整(比如某个段的{}没闭合、少了分号),ld会把INCLUDE指令错误地当成前一段定义的一部分,从而抛出“格式错误的数字”这类莫名其妙的报错。

举个典型的错误场景:

.bar {
  *(.bar)
// 这里漏掉了闭合的 }
INCLUDE dwarf.ld

这种情况下,ld会认为INCLUDE dwarf.ld是.bar段内的内容,自然无法正确解析。

解决办法:仔细检查主链接器脚本第198行(报错行)的前几行代码,确保所有的括号、分号都正确闭合,语法完全完整。

2. 被引入的dwarf.ld文件本身存在语法错误

如果dwarf.ld内部有语法问题(比如段定义格式错误、出现非法标识符、关键字拼写错误),ld在解析这个引入的文件时,会把错误定位到INCLUDE指令的位置,就表现为你看到的报错。

比如dwarf.ld里如果有这样的错误代码:

.dwarf_info {
  *(.dwarf_info)
  invalid123  // 这里是无意义的非法内容
}

就会导致ld解析失败,并把锅甩给INCLUDE指令。

解决办法:

  • 单独验证dwarf.ld的语法:用ld -T dwarf.ld --verbose命令测试该文件是否能被正常解析,直接定位内部的语法错误
  • 确保dwarf.ld里的所有段定义都符合ld的规范,比如每个段的{}配对、必要的关键字都正确

3. 文件路径的特殊字符干扰(可能性较低)

如果dwarf.ld的路径包含空格、特殊符号(比如&、$),ld可能会误解析路径内容,触发奇怪的错误。不过这种情况通常会先报“找不到文件”,但也不排除特殊场景下的解析异常。

解决办法:使用绝对路径或者不含特殊字符的相对路径指定dwarf.ld,确保ld能正确找到并读取文件。

快速验证用法正确性

你可以先做一个最小化测试来确认INCLUDE在SECTIONS内的用法没问题:

  1. 创建一个test.ld,内容只有:
.test_section {
  *(.test)
}
  1. 在主脚本的SECTIONS区块内引入它:
SECTIONS {
  .foo { ... }
  .bar { ... }
  INCLUDE test.ld
}

如果这个测试能正常通过,说明你的用法完全没问题,问题就出在dwarf.ld本身或者主脚本中INCLUDE前的语法疏漏上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:54:06