GCC和ld如何删除未使用的C/C+符号?

GCC和ld如何删除未使用的C/C+符号?

我需要严格优化可执行文件的大小(ARM),我注意到在我当前的构建方案中(gcc + ld)未使用的符号不会被剥去。

的用法arm-strip --strip-unneeded对于生成的可执行文件/库,不会更改可执行文件的输出大小。(我不知道为什么,也许根本不能).

会有什么办法(如果存在)修改我的建筑物管道,以便从结果文件中删除未使用的符号?


我甚至不会想到这一点,但我目前的嵌入式环境并不是很“强大”,甚至可以保存。500K离开2M结果是一个非常好的加载性能提高。

最新情况:

不幸的是gcc我使用的版本没有-dead-strip选项和-ffunction-sections... + --gc-sectionsld对结果的输出没有任何显着的差异。

我很震惊这甚至变成了一个问题,因为我确信gcc + ld应该自动删除未使用的符号(为什么它们必须保留它们?)。


斯蒂芬大帝
浏览 1156回答 3
3回答

慕无忌1623718

如果这条线是值得相信的,你需要提供-ffunction-sections和-fdata-sectionsGCC将把每个函数和数据对象放在自己的部分。然后你给我--gc-sections移除未使用的部分。
打开App,查看更多内容
随时随地看视频慕课网APP