请教下文件编译的知识,如何减小目标文件(obj, o)的体积大小
本帖最后由 68336016 于 2018-9-14 09:04 编辑我要编译一些库给ARM和MIPS使用,因为这些ARM和MIPS自带完整的SDK,我的库的源码可以放进SDK一起编译。
这样带来一个问题,编译出来的目标文件( obj, o)很大,打包成的库文件也非常大。
而我自己将库源码独立出来建个工程,依然还是用SDK指定的工具链来编译,这样编译出来的目标文件体积就很小,只有上面操作的1/3都不到。
当然2种方法编译出来的库都正常使用的,但是自己独立编译的库,因为各种编译参数不一定能跟SDK保持一致,所以担心有潜在隐患。
但是在SDK里一起编译出来的文件,为什么体积会那么大呢?
用ultraedit查看目标文件,发现里面非常多关于芯片,编译器的字符信息,这些对程序实际运行肯定都是没用的。
这些无用信息是否可以在编译时候去除掉呢?不然显得文件太庞大了。
不知道最终链接进可执行文件后,会不会影响最后程序体积,但是非常影响客户看法,总觉得你的文件太占空间了。 gcc有选项可以关掉所有信息输出。忘了。。 你说的“独立出来“是指生成 lib,是生成 archive 类型,还是互相链接,生成 .o 类型 abutter 发表于 2018-9-14 11:17
你说的“独立出来“是指生成 lib,是生成 archive 类型,还是互相链接,生成 .o 类型 ...
就是自己单独建个工程,只编译自己库的文件。生成obj,然后ar之类命令打包成.lib或者.a 不用的函数全部加static 同一个C文件,用同样的编译器和编译选项,不管在哪里,编出来的目标文件肯定是一样的。你在SDK里编出来的目标文件估计是加了调试信息的,gcc的话好像是-g选项打开了。 提供给别人库,可以直接生成 obj 文件,然后打包成 .a,好处是容易使用,只是省了别人的编译时间,坏处是你每个文件的对外函数或者变量会被透除去。另外一种做法是半链接一次,生成一个 .o,不对外的接口函数和变量可以从文件种剔除,这样更容易优化,接口更明晰。
页:
[1]