1

我正在做一个包括编写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 中的部分,以便我可以使用这些部分。

4

1 回答 1

0

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

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

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

于 2016-05-02T23:18:38.153 回答