搜索
bottom↓
回复: 6

请教下文件编译的知识,如何减小目标文件(obj, o)的体积大小

[复制链接]

出130入129汤圆

发表于 2018-9-14 09:01:31 | 显示全部楼层 |阅读模式
本帖最后由 68336016 于 2018-9-14 09:04 编辑

我要编译一些库给ARM和MIPS使用,因为这些ARM和MIPS自带完整的SDK,我的库的源码可以放进SDK一起编译。

这样带来一个问题,编译出来的目标文件( obj, o)很大,打包成的库文件也非常大。

而我自己将库源码独立出来建个工程,依然还是用SDK指定的工具链来编译,这样编译出来的目标文件体积就很小,只有上面操作的1/3都不到。

当然2种方法编译出来的库都正常使用的,但是自己独立编译的库,因为各种编译参数不一定能跟SDK保持一致,所以担心有潜在隐患。

但是在SDK里一起编译出来的文件,为什么体积会那么大呢?

用ultraedit查看目标文件,发现里面非常多关于芯片,编译器的字符信息,这些对程序实际运行肯定都是没用的。

这些无用信息是否可以在编译时候去除掉呢?不然显得文件太庞大了。

不知道最终链接进可执行文件后,会不会影响最后程序体积,但是非常影响客户看法,总觉得你的文件太占空间了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入442汤圆

发表于 2018-9-14 10:28:59 来自手机 | 显示全部楼层
gcc有选项可以关掉所有信息输出。忘了。。

出0入12汤圆

发表于 2018-9-14 11:17:38 | 显示全部楼层
你说的“独立出来“是指生成 lib,是生成 archive 类型,还是互相链接,生成 .o 类型

出130入129汤圆

 楼主| 发表于 2018-9-14 11:20:22 来自手机 | 显示全部楼层
abutter 发表于 2018-9-14 11:17
你说的“独立出来“是指生成 lib,是生成 archive 类型,还是互相链接,生成 .o 类型 ...

就是自己单独建个工程,只编译自己库的文件。生成obj,然后ar之类命令打包成.lib或者.a

出0入0汤圆

发表于 2018-9-14 11:36:38 来自手机 | 显示全部楼层
不用的函数全部加static

出0入0汤圆

发表于 2018-9-14 11:43:49 | 显示全部楼层
同一个C文件,用同样的编译器和编译选项,不管在哪里,编出来的目标文件肯定是一样的。你在SDK里编出来的目标文件估计是加了调试信息的,gcc的话好像是-g选项打开了。

出0入12汤圆

发表于 2018-9-17 10:31:04 | 显示全部楼层
提供给别人库,可以直接生成 obj 文件,然后打包成 .a,好处是容易使用,只是省了别人的编译时间,坏处是你每个文件的对外函数或者变量会被透除去。另外一种做法是半链接一次,生成一个 .o,不对外的接口函数和变量可以从文件种剔除,这样更容易优化,接口更明晰。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-14 21:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表