objcopy生成的原始二进制文件太大了

时间:2013-09-26 04:07:58

标签: c gcc linker binary mips

已经读过这篇但无法解决我的问题。

huge binary files with objcopy

对于某些测试需求。 我必须在链接时添加以下链接脚本。

.section_test 0x11323000: {  *(.section_test) }

此自定义部分必须从大地址0x11323000开始。

然后使用objcopymips生成原始二进制文件

objcopymips -O binary vxWorks.st E0122.bin    

此步骤使最终的原始二进制文件bin文件太大。从27MB到超过270MB。

通过这种方式,它无法加载到我们只有大约64MB物理内存的机器中。

我可以减少它的大小而不删除任何部分并仍然可以执行吗?

1 个答案:

答案 0 :(得分:2)

objcopy -O binary根据节的加载地址生成程序的内存映像。在您的情况下,.section_test的加载和运行时地址是相同的,即加载地址是0x11323000,这解释了大文件大小。

通常的解决方案是使用紧凑的加载映像创建一个可执行文件,并让程序本身在使用它们之前将必要的部分从其加载地址复制到它们的运行时地址。

示例:

.section_test 0x11323000 : AT(some-small-address) {  *(.section_test) }

.section_test 0x11323000 : {  *(.section_test) } AT> some-region-name

同时检查此页面: https://sourceware.org/binutils/docs/ld/Output-Section-LMA.html#Output-Section-LMA