【发布时间】: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 和链接器脚本。标题可能不太合适,对此感到抱歉..非常感谢您的回复...所有人!