在我的arm cortex-m项目中,我使用cmake生成makefile并运行make编译项目,如果仔细查看LD输出的map文件,会发现它链接了一个在项目中还没有用到的目标文件。和它的一个未使用的函数的名称在。text部分。我试图弄清楚是否有一个命令开关,LD垃圾收集任何未使用的目标文件。我已经使用了gc-sections标志,但是没有用。有没有一种方法可以丢弃这个输出的目标文件,以免它被放在二进制文件的某个地方?
在我的cmakelists.txt中,我确实指定了包括所有C源文件,所以很明显,我可以在那里修剪一些目标文件,但这似乎很乏味。
1条答案
按热度按时间vmdwslir1#
请参阅关于避免链接时操作自有代码的好建议,如果不需要,请考虑在编译时删除它。
--print-gc-sections
to review and discover removed sections。gc-sections
to remove symbols。也许这能帮上忙,这是我对这个答案的体验...
问题
如何丢弃生成的elf文件中未使用的符号
输出
显示未使用的函数
foo
包含在before elf文件中,并在after elf文件中删除。过程
1.使用未使用的符号创建手臂精灵(之前)
1.修改手臂精灵以移除未使用的符号(之后)
输入
下面是命令,代码基于Hello World for bare metal ARM
启动. s
试验编号
测试. c
链接
.a
而不是.o
关于使用库的评论看起来很有趣,所以我写了这个实验。基于下面的特定链接器和命令,
foo
被包含在结果elf中。仍然可能是不同链接器或更好命令的解决方案。尽管想法很酷。