gcc 编译c文件为exe 太大了,怎么变小。
随便一个写 c 的文件, main.c
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Hello World! \n");
return 0;
}
gcc -o output.exe test12.c
编译出来 exe 竟然有53k,太夸张了吧,我一个helloworld竟然这么大。
怎么瘦身呢?
0x1 使用参数降低
GCC编译器有一些选项可以帮助减小生成的可执行文件的大小。以下是一些步骤:
- 使用优化级别 -O2 或 -O3。这些优化级别会尝试减小代码的大小并提高执行速度。
- 使用 -s 选项来去除符号表信息。
- 使用 -flto 选项来启用链接时优化。
- 使用静态链接。动态链接的库可能会增加可执行文件的大小,因为它们需要包含额外的信息来找到和链接动态库。静态链接可以通过 -static 选项启用。
- 使用strip命令。strip命令可以从可执行文件中删除符号表和调试信息
这是一个使用这些选项的GCC命令示例:
gcc -O2 -s -flto -static -o output.exe main.c
strip output.exe
这个命令会编译 main.c 文件,并使用 -O2,-s 和 -flto 选项,然后将结果输出到 output.exe 文件。
经过瘦身后,从 55k 减低到 15k。减低了 73%。
0x2 使用upx压缩exe
使用UPX(Ultimate Packer for eXecutables)来压缩你的可执行文件。UPX是一个自由,便携式,可扩展的高级可执行文件包装器。它可以压缩各种不同的可执行文件格式。
以下是一个使用UPX的示例:
upx -9 output.exe
这个命令会使用最大压缩比(-9)来压缩 output.exe 文件。
请注意,使用UPX压缩的文件在运行时需要解压,这可能会稍微增加程序启动的时间。
在Windows上,你需要从UPX的官方网站下载预编译的二进制文件,并将其添加到你的系统路径中。你可以在这里下载:https://upx.github.io/
D:\>upx.exe -9 output.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2023
UPX 4.2.1 Markus Oberhumer, Laszlo Molnar & John Reiser Nov 1st 2023
File size Ratio Format Name
-------------------- ------ ----------- -----------
15360 -> 8192 53.33% win64/pe output.exe
Packed 1 file.
再次瘦身,exe减少到 8k。