我正在使用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上一切正常,但是,只需要使用斜杠而不是反斜杠。
这是一个众所周知的问题?或者有解决方法吗?
答案 0 :(得分:1)
加倍反斜杠可以解决问题。
.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)))
似乎第一个反斜杠逃脱后者,所以后者不会逃脱通配符。