按GNU ld文档指定输出段类型时遭遇语法错误求助
问题原因及解决方法
你遇到的报错是因为ld 2.34版本对输出段属性的语法位置要求严格:(TYPE = SHT_PROGBITS)这类属性必须直接紧跟在段名称(或可选的VMA地址参数)之后,不能在段名和属性之间插入ALIGN(4K)这类地址修饰符。
你的原写法把ALIGN(4K)放在了段名.bss和属性(TYPE = ...)之间,违反了该版本的语法规则,导致ld解析失败。而测试用例中的写法都是段名后直接跟属性,没有中间插入其他修饰,所以符合语法要求。
正确的写法示例
写法一:简化对齐配置(若VMA和段内小节对齐需求一致)
.bss (TYPE = SHT_PROGBITS) : ALIGN(4K) { *(COMMON) *(.bss .bss.*) }
写法二:保留双重对齐配置(分别指定VMA起始地址和段内小节对齐)
.bss (TYPE = SHT_PROGBITS) ALIGN(4K) : ALIGN(4K) { *(COMMON) *(.bss .bss.*) }
内容的提问来源于stack exchange,提问作者phip1611
相关产品推荐
相关产品推荐

