通配符在Mingw中不起作用(Windows)GNU ld脚本
问题描述:
我正在使用由GCC ARM Embedded提供的工具链。看来ld(4.9-2015-q3-update)无法正确处理通配符(*)与Windows路径。通配符在Mingw中不起作用(Windows)GNU ld脚本
例如,下面的代码片段
.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) }
这里是映射文件的报告,
.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环境,您是否尝试过使用斜杠而不是反斜杠? –
它也行不通。 – chenwj
也许尝试将反斜杠加倍以避免它:'.foo_v0 {obj \\ *(。s_foo_v0)}' –