Gcc 通配符不';不能在Mingw(Windows)GNU ld脚本中工作
我正在使用由提供的工具链。似乎ld(4.9-2015-q3-update)无法正确处理Windows路径的通配符(*) 例如,下面的代码片段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
.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工具似乎可以使用正斜杠作为路径分隔符。这对便携性也有一点帮助。