1

已阅读此内容,但无法解决我的问题。

带有 objcopy 的巨大二进制文件

对于一些测试需要。链接时我必须添加以下链接脚本。

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

这个自定义段必须从一个大地址 0x11323000 开始。

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

objcopymips -O binary vxWorks.st E0122.bin    

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

这样它就不能加载到我们只有大约 64MB 物理内存的机器上。

我可以在不删除任何部分的情况下减小它的大小并仍然让它可执行吗?

4

1 回答 1

3

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

于 2013-09-26T07:15:54.570 回答