使用--gc-section编译选项减小程序体积

本周在给程序添加功能的时候,突然发现,我只是写了几个函数,还没调用,size就变大了。这肯定是不行的嘛,没用的函数就应该不链接进来,占用我宝贵的空间。

这种功能,讲道理编译器肯定要支持的,于是搜了一下,果然是有个编译选项

需要在编译的时候,加入-ffunction-sections, -fdata-sections 选项,在链接的时候,加入--gc-sections选项

大概的意思就是,编译的时候,把每个函数作为一个section,每个数据(应该是指全局变量之类的吧)也作为一个section,这样链接的时候,--gc-sections会把没用到的section丢弃掉,最终的可执行文件就只包含用到了的函数和数据。

也就是说,链接的单位,是函数级别,这样就能丢弃没使用的函数。如果不加-ffunction-sections选项,则默认似乎是每个源文件为一个section进行链接,这样子只要这个文件中用到了一个函数,那么所有的函数都会被链接进来。

找了个小程序试了下,效果显著,于是加到了工作代码的Makefile中,但是,问题出现了,居然给我链接出来一个接近空的文件

一脸懵逼

想来想去,突然想到,是不是链接脚本有问题,没指定入口函数,所以编译器认为所有的函数都没用,于是全部丢弃了

赶紧试试,果然, 在lds文件中加上  ENTRY(_start) 之后,就好了,编译出来查看map文件,确实把没用到的函数丢弃了

但还有一个问题,就是不能加上 -fdata-sections ,加上就报错,只能用-ffunction-sections,这个暂时没解决

本文地址:http://www.cnblogs.com/zqb-all/p/6128673.html

时间: 2024-10-10 20:20:42

使用--gc-section编译选项减小程序体积的相关文章

减小Delphi XE5编译出来的程序体积

. 默认Delphi XE, XE2, XE3,XE4,XE5, XE6 ... 编译出来的程序体积很大. 一般用两个方法可以很大程度上减少程序体积. 一.在工程中用编译指令禁用RTTI 禁用的方法很简单,就是要在工程 的Uses语句前添加下面的定义就可以了: { Reduce EXE size by disabling as much of RTTI as possible (delphi 2009/2010) } {$IF CompilerVersion >= 21.0} {$WEAKLIN

基于ApkPlug调用ShareSDK组件减小应用体积

一 引言: 利用ApkPlug插件化框架将ShareSDK组件化,以实现按需动态加载和减小应用体积的目的. ShareSDK是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它.但是当我们集成ShareSDK时候同样会遇到一些问题. 1. ShareSDK包比较大,组合国内多家分享平台以后其SDK包的大小应该在1M以上,这对应用来说还是不小的负荷. 2. 集成ShareSDK过程中我们不可避免的需要将它的资源文件复制到应用的res资源目录下,这对我们应用后期维护造成不小的干扰.

如何为你的微信小程序体积瘦身?

众所周知,微信小程序在发布的时候,对提交的代码有1M大小的限制!所以,如果你正在写一个功能稍微复杂一点的小程序,就必须得时刻小心注意你的代码是不是快触及这个底线了. 在设计一个小程序之初,我们就需要重点考虑这一点,采取一些方法,来避免太早的遭遇这个问题. 避免使用本地大图片.大资源文件 请避免在小程序的UI上使用大图片,应该尽可能的通过颜色样式来装点你的小程序 或者,使用小而精致的小图标来点缀 如果实在想用大图片,那请不要将图片放进小程序的本地代码中,应该采用从一个远程URL地址加载图片的方式

使用quicklz缩小程序体积

简述 有一个需求是这样的,写的一个程序内置了一个很大的文件(实际就是抓取epsg.io的内容里面的epsg.io.json),这个文件筛选缩减后还有12MB,如果直接内置到程序中,编译后的程序就很大了. 因为这个程序是一个动态库,而使用upx压缩过的动态库有时候会有一些异常问题出现,所以不考虑使用upx进行压缩. 看到了quicklz后,感觉这是个好东西,于是就用这个来进行压缩,把压缩后的数据写入程序中,使用前进行解压即可.使用这个操作之后,程序大小从12MB缩小为不到1.5MB,效果很明显.

Android Studio如何减小APK体积

最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行.但是遇到一个问题,导出的APK文件大小竟然达到了1034K.这不科学,于是就自己动手精简APK.下面我们大家一起学习怎么缩小一个APK的大小,以hello world为例. 新建工程,最低版本支持2.3.3,其他默认.工程目录是这样的: 我们直接签名导出APK,看看大小如何,1M啊!( ⊙ o ⊙ ) 什么鬼: 怎么可能呢是吧?都还没有写代码呢,就已经1M了.检查一下代码,我们会发现,工程里自动添加了V7的向下兼容包,

减小Cookie体积

HTTP coockie能够用于权限验证和个性化身份等多种用途.coockie内的有关信息是通过HTTP文件头来在webserver和浏览器之间进行交流的.因此保持coockie尽可能的小以降低用户的响应时间十分重要. 设置合理的过期时间.较早地Expire时间和不要过早去清除coockie,都会改善用户的响应时间.

C++--学习笔记012

20150516 头文件,以h为后缀名,包含函数,数据(包括数据类型定义),类等的声明. 在例子中多次引用"iostream"头文件,就是为了共享声明在其中的输入输出流对象 把子模块的声明放在头文件中,将具体的实现放在对应的源文件中 在一个程序的所有源代码中,源文件和头文件各司其职,共同完成一个完整的程序 源文件和头文件不仅在内容上有差别,在使用上也有很大的差别 不允许头文件引用源文件.虽然语法上可以. 头文件可以引用其他的头文件,构成新的头文件 头文件 stdafx.h就是多个头文件

iOS界面设计切图小结

iOS界面设计切图小结 APR 12TH, 2013 1.基本尺寸 (1)界面 实际设计时按: iPhone4.4s:640px*960px iPhone5: 640px*1136px iPad:1536px*2048px (2) 图标: 1024px*1024px 圆角180px 提交1024px*1024px 方角 png格式图片 2.图形部件及字体 (1) 为显示清晰 所有图形部件尺寸必须为偶数 样式中阴影.发光.描边的数值也必须为偶数 (2) 为方便用户点击 所有可点击的部件需大于88p

crack笔记1 常用脱壳方法

---------------------------------------------------------------------------------黑鹰红客基地动画教程黑鹰红客基地www.3800cc.com专业的红客安全技术培训基地多抽出一分钟时间学习.让你的生命更加精彩.注:10元的动画免费对外公布.20.50.100.200元的动画只提供给本站的vip会员做为辅助教材.------------------------------------------------------