【发布时间】:2019-03-15 00:39:23
【问题描述】:
我已经为模拟器构建了一些代码,现在正尝试使用 TI 的免费工具链交叉编译到具有 64kb nvram 的目标。编译器声称我的代码超出 ROM 大约 34kb:
(...) msp430-elf/bin/ld: region `ROM' overflowed by 33716 bytes
另一行说它无法将.text 字段放入其分配的空间。我不敢相信我的添加总共是 34kb,更不用说导致二进制文件溢出这个数量了。
- 我的代码添加到项目中的 .o 文件仅占项目总数的一小部分(1.9MB 中的 200kb),而且我已经取出了项目中的大量组件。
- 我已经向编译器传递了
-Os -s标志。 - 新代码包含大约 100 个字符的字符串字面量。
- 我的代码使用了很多
math.h函数(实际上它是唯一做浮点运算的部分),调用strtod,调用sprintf
是否有任何工具或方法可以分解导致二进制文件如此大的原因?
【问题讨论】:
-
看看链接器生成的地图文件,它应该会告诉你你需要的一切。
-
我想看看你自己的答案,你是如何解决这个问题的;)
-
在映射文件中查找不可见的(即编译器/链接器将它们放在那里,而不是您)例程,以查找不需要的“pc”内容,例如进程退出处理程序、异常处理程序、除零处理程序。
标签: c embedded cross-compiling microcontroller