减小Gcc编译程序的体积
众所周知,Gcc编译的原始程序一般很大,其实有几种方法能大大减小目标代码的体积,一般有以下几种方法。
1、禁用调试信息
Release编译时不要加上-g开关。
2、使用-Os编译程序。
不要使用-funroll-loops等可以加速程序执行但是会大大增加目标代码体积的开关。
3、编译后的程序使用strip去除符号和偏移(限于可执行程序和共享库,其他易出问题)。
4、如果你不需要RTTI,编译时加入-fno-rtti。
5、如果你不需要处理C++异常,编译时加入-fno-exceptions。
6、使用UPX之类的可执行程序压缩程序(只推荐用于可执行程序,用于其他也可,但是较浪费内存)。
例如,使用wxWidgets动态编译的程序初始体积可能有429KB,经过以上方式(未经UPX压缩)处理后,体积减少为108KB,UPX压缩后体积为35KB。
7、补充:通过cmd调用它
UPX命令使用方法:
upx [-123456789dlthVL] [-qvfk] [-o file] file
参数1:
-1 最快压缩
-9 最大压缩
-d 解压缩
-l 列出压缩的文件
-t 测试压缩的文件
-V 显示版本信息
-h 显示更多帮助
-L 显示软件许可证
参数2:
-q 安静模式
-v 详细模式
-o 指定输出文件路径(若带上此参数,原被压缩文件将保留)
-f 强行压缩
-k 保留备份文件
下面举几个实例:
把main.exe压缩:
upx main.exe
压缩main.exe但是保留原来的main.exe文件,另存压缩的文件到E:\mainc.exe(通过-o参数指定新生成文件,不加-o就是压缩但不保留原来文件)
upx -o E:\mainc.exe main.exe
压缩main.exe,指定压缩等级为最大(可见下面upx带上了-9这个参数,这个9就是压缩等级,压缩等级从1到9,1是最小压缩运行效率优先,9是最大压缩节省空间为主,可以配合上面的-o参数一起使用):
upx -9 main.exe
若c.exe已经被压缩,还可以通过upx命令解压缩(-d参数,同样可以配合-o参数指定输出目录):
upx -d c.exe
下面我对上文的main.exe执行命令:
upx -9 main.exe
还需要注意的是,若要同时去除符号信息和进行UPX压缩,必须先去除符号信息再使用UPX命令压缩!若先进行了UPX压缩你会发现无法使用strip命令去除符号信息了!