【问题标题】:Makefile linker is unable to link one of the object filesMakefile 链接器无法链接目标文件之一
【发布时间】:2016-05-01 04:58:24
【问题描述】:

我正在做一个包括编写 makefile 的项目。在这里,我有 2 个不同的 makefile。第一个执行初始构建步骤。在第二个 makefile 中,我尝试使用最初生成的目标文件(提供的路径)并在其他位置添加另一个生成的目标文件。我在这里面临的问题是链接器无法将这个新目标文件链接到旧目标文件。

我正在使用此命令来执行此步骤。

arm-none-eabi-g++ -T ../linker.ld -nostartfiles -Xlinker --gc-sections -Wl,-Map,"map_file.map" -specs=nano.specs -o "target.elf" new_file.o all_older_files.o

这里的 new_file.o 是 arm_eabi 版本 0,all_older_files.o 是 arm_eabi 版本 5。但是,这并没有给我任何错误或警告。而且,有趣的是,new_file.o 中的一些符号被包含在 target.elf 文件中。我已经检查并检查了链接器脚本,但找不到解决方案,还检查了 eabi 版本是否有所不同,但如果我使用 elf 编辑器手动编辑 elf 文件,它是相同的。

我想要的只是我需要在这个 target.elf 中包含 new_file.o 中的部分,以便我可以使用这些。

【问题讨论】:

  • 首先,这里为什么需要两个makefile?上帝保佑,你不是在一个 makefile 上递归调用另一个 Make?
  • 我很困惑 - 你是说链接器没有给出错误,成功生成输出 ELF,并且说链接的 ELF 包含来自输​​入对象的东西 - 以什么方式“无法链接“, 确切地?这听起来更像是您的链接器脚本只是丢弃了比您想要的更多的东西,但不知道脚本的作用以及对象实际包含的部分谁可以说?或者也许“缺失”的部分根本没有被其他任何东西引用,所以它把它们扔掉了因为你告诉它。这些与 makefile 有什么关系?
  • @MarkGaleck 在我的项目中,第一个 make 文件就像来自 eclipse 的自动生成文件,因为我使用的是基于 eclipse IDE 的 C 项目。第二个 makefile 是在 Post_Build 选项中设置的,我用于生成项目中需要的一些附加文件。我不想编辑 autogen 文件或修改项目设置。
  • @Notlikethat 我有点看同样的场景。所以,您说链接器正在丢弃未引用的部分。能不能请教一下。另外,我是否告诉makefile这样做?在什么时候发生这种情况。对不起,如果这是一个非常基本的问题,这是我第一次处理 makefile 和链接器脚本。标题可能不太合适,对此感到抱歉..非常感谢您的回复...所有人!

标签: makefile linker arm eabi


【解决方案1】:

我想我明白了。谢谢@Notlikethat,您的洞察力帮助了我。我发现“--gc-sections”忽略了未引用的符号和部分。

但是,当我第一次尝试此操作时,这些部分的内存部分超出了应有的部分,并认为这不是解决方案。但是,后来我注意到最初的自动生成 makefile 也在执行相同的删除未使用部分的操作。所以我不得不在eclipse项目设置中禁用它,然后在我的makefile中删除这个标志。这将部分放置在应有的位置。

非常感谢,这为我节省了大量时间,因为我与这个问题的斗争比需要的时间长了一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多