通配符在 Mingw (Windows) GNU ld 脚本中不起作用

Wildcard doesn't work in Mingw (Windows) GNU ld script

我正在使用 GCC ARM Embedded 提供的工具链。似乎 ld (4.9-2015-q3-update) 无法正确处理带有 Windows 路径的通配符 (*)。

例如下面的代码片段

.foo_v0 { obj\*(.s_foo_v0) }

不会在目录 obj 下找到文件,并且 .foo_v0 什么也得不到。这是来自 mapfile 的报告:

.s_foo_v0       0x00008664       0x1c
 .s_foo_v0      0x00008664       0x1c obj\test\foo.o
                0x00008664                foo_v0

.foo_v0         0x00008680        0x0
 obj\test\*(.s_foo_v0)
                0x00008680                PROVIDE (__load_start_foo_v0, LOADADDR (.foo_v0))
                0x00008680                PROVIDE (__load_stop_foo_v0, (LOADADDR (.foo_v0) + SIZEOF (.foo_v0)))

在 Cygwin 上一切正常,但是,只需要使用斜杠而不是反斜杠。

这是一个已知问题?或者有解决方法吗?

将反斜杠加倍即可解决问题。

.foo_v0 { obj\*(.s_foo_v0) } 

这是来自 mapfile 的报告,

.foo_v0         0x00008664       0x1c
 obj\*(.s_foo_v0)
 .s_foo_v0      0x00008664       0x1c obj\test\foo.o
                0x00008664                foo_v0
                0x00008664                PROVIDE (__load_start_foo_v0, LOADADDR (.foo_v0))
                0x00008680                PROVIDE (__load_stop_foo_v0, (LOADADDR (.foo_v0) + SIZEOF (.foo_v0)))

好像第一个反斜杠转义了后一个反斜杠,所以后一个反斜杠不会转义通配符。