通配符在 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)))
好像第一个反斜杠转义了后一个反斜杠,所以后一个反斜杠不会转义通配符。
我正在使用 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)))
好像第一个反斜杠转义了后一个反斜杠,所以后一个反斜杠不会转义通配符。