通配符在Mingw(Windows)GNU ld脚本中不起作用

时间:2015-11-05 07:35:36

标签: gcc cross-compiling ld binutils

我正在使用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上一切正常,但是,只需要使用斜杠而不是反斜杠。

这是一个众所周知的问题?或者有解决方法吗?

1 个答案:

答案 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)))

似乎第一个反斜杠逃脱后者,所以后者不会逃脱通配符。