【发布时间】:2016-02-05 22:55:51
【问题描述】:
我使用的是GCC ARM Embedded提供的工具链。似乎 ld (4.9-2015-q3-update) 无法正确处理带有 Windows 路径的通配符 (*)。
比如下面的代码sn-p
.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 上一切正常,但是,只需要使用斜杠而不是反斜杠。
这是一个已知问题?或者有什么解决方法?
【问题讨论】:
-
您是否尝试过使用斜杠而不是反斜杠,即使您不使用 Cygwin 环境?
-
它也不起作用。
-
也许可以尝试加倍反斜杠来转义它:
.foo_v0 { obj\\*(.s_foo_v0) } -
将反斜杠加倍有效。如果我只使用一个反斜杠,它会转义通配符,所以我需要另一个反斜杠来转义后一个?
-
好像是这样。太糟糕了,它不会使用正斜杠匹配。 Windows 上的许多 GNU 工具似乎都可以使用正斜杠作为路径分隔符。这也有助于提高便携性。
标签: gcc cross-compiling ld binutils