【问题标题】:'Current Directory' search path for INCLUDE in GNU linker (ld)?GNU链接器(ld)中包含的“当前目录”搜索路径?
【发布时间】:2020-10-18 05:25:15
【问题描述】:

我已将链接描述文件的 MEMORY{} 命令拆分为单独的文件 memmap.ld,以便在项目(引导加载程序和目标固件)之间共享它。 该文件当前与主链接器脚本位于同一目录中,我使用该行包含它

包括 memmap.ld

来自我的主 .ld 脚本,但这不起作用,我收到错误

ld.exe: 无法打开链接描述文件 memmap.ld: 没有这样的文件或目录

在构建时。 ld 手册中处理 INCLUDE 文件名 命令的部分为

此时包含链接描述文件文件名。该文件将在 当前目录,以及使用“-L”选项指定的任何目录。你 最多可以嵌套调用 INCLUDE 10 层。 您可以将 INCLUDE 指令放在顶层、MEMORY 或 SECTIONS 命令中,或输出部分描述中。

这是怎么回事?当前目录是否取自当前脚本、可执行文件、其他一些外部参数?

如果有什么不同的话,我正在使用与 64 位 Windows STM32CubeIDE 一起分发的 GNU Linker 的 ST 版本。

【问题讨论】:

    标签: stm32 gnu ld


    【解决方案1】:

    使用 INCLUDE 时,当前目录中 .ld 脚本的匹配似乎仅与通过“-L searchdir”或“-T scriptfile”引入的脚本名称进行比较。

    [即LD 程序不进行文件系统搜索,而是搜索在调用期间提供的脚本列表(或至少如此)]

    我在使用 STM32CubeIDE 时仅提供通过项目系统中的 -T 选项提供单个加载程序脚本的选项(而 ST 基于其工具的 Eclipse Embedded CDT 允许 -T 传递多个文件)使用 -L 选项添加包含我的两个脚本的文件夹(来自链接器项目属性的库子部分)。

    一旦我在 LD 中引用的脚本通过在命令行中包含目录位置传递通过构建系统,“当前目录”确实会解析为执行包含的脚本的位置。

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2023-03-06
      • 2013-04-18
      • 2019-02-22
      相关资源
      最近更新 更多