【发布时间】:2024-01-02 08:39:01
【问题描述】:
一点背景知识: 我正在尝试为嵌入式传感器系统构建 AVR 二进制文件,并且我正在运行接近我的大小限制。我使用了一些外部库来帮助我,但是当每个库编译成一个对象时它们相当大。我想把它们拉成更小的对象,这样只有我需要的功能才链接到我的程序中。通过拆分一个大型库,我已经设法将二进制大小减少了 2k。
知道在游戏的每个阶段使用了哪些对象会很有帮助,这样我就可以更有效地拆分它们。有没有办法让ld 打印它正在链接的对象?
【问题讨论】:
-
AFAIK ld 应该只链接实际有用的函数。旁注:你在使用 -Os 优化吗?
-
是的,现在它一直上升到 -O3。我不明白为什么 ld 会引入额外的代码,但是当我拆分其中一个较大的库时,它显着减小了二进制大小。
-
对生成的可执行文件使用
nm -a。这将列出调试符号,包括 source 文件的名称。 -
太棒了,非常有用。谢谢你的提示!编辑:它似乎也适用于关闭调试符号,所以我不必构建单独的二进制文件。
-
不要使用
-O3。使用-Os。第一个是性能,第二个是尺寸。