如何在ld链接描述文件中使用INCLUDE命令

par*_*vus 5 gcc include linker-scripts

我有两个链接器脚本:common.ld它们定义了一些符号,并app.ld使用这些定义来定位这些部分.

如果我只将两个文件一起捕获,并将其提供给ld(通过gcc),它就可以了.如果我使用INCLUDE命令:

包括common.ld

我收到错误:

ld.exe:flags中的语法无效

collect2:ld返回1退出状态

我做错了什么?包含另一个加载脚本的正确语句是什么?


来自http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html#IDX204:

INCLUDE文件名

此时包括链接描述文件名.将在当前目录以及使用-L选项指定的任何目录中搜索该文件.您可以将呼叫嵌套到INCLUDE最多10级.

注意:我在Windows 7 PC上运行,使用Code Red的arm gcc工具,完整版:

arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2 20121016 (release) [ARM/embedded-4_6-branch revision 192487

Ric*_*ton 8

这个很有意思.显然,ld命令文件lexer中存在一个错误.我正在使用binutils版本2.24并遇到了同样的问题.你包含的一个文件有一个MEMORY命令

MEMORY
{
  rom (rx) : ORIGIN = 0x00000000, LENGTH = 64M
  ram (!rx) : ORIGIN = 0x48000000, LENGTH = 32M
}
Run Code Online (Sandbox Code Playgroud)

我认为(但尚未证明)词法分析器为包含文件中的第二个属性返回"!rx"而不是"rx".将MEMORY命令更改为

MEMORY
{
  rom (rx) : ORIGIN = 0x00000000, LENGTH = 64M
  ram (! rx) : ORIGIN = 0x48000000, LENGTH = 32M
}
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.我在ld源代码中查看了ldlex.l和ldgram.y但在我的眼睛开始受伤之前找不到明显的错误.

错误报告:https://sourceware.org/bugzilla/show_bug.cgi? id = 17900