【发布时间】:2020-03-26 14:42:33
【问题描述】:
最近我在尝试链接我的程序时遇到了一个问题。它报告.text 无法放入指定的内存区域。显然源代码变得太大而无法在有限的内存区域中链接。
我现在要做的是分析哪个文件对“.text”部分的贡献最大,以便可以执行后续代码优化。我尝试了很多方法,但没有成功。
-
nm -s output.elf给出每个符号的大小,但不要将符号分组到每个源文件下。 -
nm -s file.obj遍历每个目标文件不起作用,因为指定了-fdata-section-ffunction-section-Wl,因此并非目标文件中的所有内容都会链接到最终输出 -
readelf -s output.elf提供文件之间的信息,但它只是列出每个文件下的符号及其大小。可以写一个脚本来求和一个文件下的所有大小,但是总的值似乎不对,这里的一个明显错误是某些符号可能指向同一个内存位置,因此可能会多次计算同一个内存区域。
当 gcc 链接完成其工作时,它应该知道从目标文件中提取并放入输出部分的所有详细信息,但似乎它没有提供生成详细报告的开关(或者我错过了什么?)
有什么工具可以完成这项工作吗?
【问题讨论】:
标签: gcc hyperlink statistics out-of-memory