VxWorks RTP工程ELF文件大小优化

本文探讨了VxWorks 6.8中RTP工程使用GNU系列编译器编译后的VXE文件比Linux ELF文件大一倍的问题。通过分析发现,VXE文件含有大量重定位段(rela段)。尽管删除这些段可缩小文件大小,但会导致运行错误。了解到VxWorks的内存模式后,尤其是Overlapped virtual memory model下不需要重定位信息,作者提出设置RTP在这种模式下运行,并使用strip工具进行优化,以实现节省Flash空间的目标。

    VxWorks6.8提供了两套编译器:一套为diab系列编译器,为VxWorks传统的编译器;另一套为GNU系列的编译器,主要用来编译RTP工程。

    RTP工程所使用的GNU系列编译环境可以使我们的基于嵌入式Linux的项目无缝地移植到VxWorks里面,在我们的实际使用中除了编译出来的文件大小比Linux的交叉编译工具链编译出来的文件大一倍左右外,基本上没什么区别了。刚开始的时候项目比较紧,基本上没有什么时间去优化这个问题,忙完一段时间后,项目告一段落,终于有时间要解决这个问题了,毕竟flash的成本也挺高昂的。

    我们的代码是跨多个硬件平台、跨多个编译器和跨多个操作系统的,可以支持x86、ppc8548、ppc880、ppc8313、arm cortex a8、arm cortex a9等硬件平台、支持VC、VxWorks gnu系列编译器、Linux gcc系列编译器和支持xp、linux、VxWorks操作系统,就这样基本同一份代码,使用Linux的gnu交叉编译工具链编译出来的的ELF文件大小为3.5M左右,但使用VxWorks的gnu系列的交叉编译工具链并使用相同的编译优化选项编译出来的VXE文件(其实使用VxWorks gnu系列编译器编译出来的可执行文件也是ELF格式文件,但在本文中为了跟Linux中编译出来的可执行文件做区别,我称呼使用VxWorks gnu系列的编译工具编译出来的文件为VXE文件,因为它以VXE作为其后缀)竟然有7M,整整大了一倍,同样是gnu系列的编译工具,为什么会有这么大的区别呢?通过相应的readelf文件查看ELF文件和VXE文件的各个段信息并做对比,发现VXE文件比ELF文件多了很多的rela段,rela段为重定位段,为什么VXE文件作为可执行文件它还需要那么多的重定位信息呢?ELF

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值