Gcc 通配符不';不能在Mingw(Windows)GNU ld脚本中工作

Gcc 通配符不';不能在Mingw(Windows)GNU ld脚本中工作,gcc,cross-compiling,ld,binutils,Gcc,Cross Compiling,Ld,Binutils,我正在使用由提供的工具链。似乎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

我正在使用由提供的工具链。似乎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)))

第一个反斜杠似乎会逃逸后一个,因此后一个不会逃逸通配符。

即使不使用Cygwin环境,您是否尝试过使用斜杠而不是反斜杠?它也不起作用。也许可以尝试将反斜杠加倍以逃逸:
.foo_v0{obj\\\*(.s__v0)}
反斜杠加倍有效。如果我只使用一个反斜杠,它将转义通配符,因此我需要另一个反斜杠来转义后一个?似乎是这样。很遗憾,它不能使用正斜杠匹配。Windows上的许多GNU工具似乎可以使用正斜杠作为路径分隔符。这对便携性也有一点帮助。