已阅读此内容,但无法解决我的问题。
huge binary files with objcopy
为了一些测试需要。 我必须在链接时添加以下链接脚本。
.section_test 0x11323000: { *(.section_test) }
这个自定义的段必须从大地址0x11323000开始。
然后使用objcopymips生成原始二进制文件
objcopymips -O binary vxWorks.st E0122.bin
此步骤使最终的原始二进制文件(bin 文件)太大。从 27MB 到超过 270MB。
这样它就无法加载到我们只有大约 64MB 物理内存的机器中。
我可以在不删除任何部分的情况下减小它的大小并仍然让它可执行吗?
最佳答案
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
关于c - objcopy 生成的原始二进制文件太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019199/