GCC编译出来的文件过大,如何瘦身?

本文介绍了如何通过strip命令、编译参数和链接参数来优化代码大小,删除符号表和未使用的符号,以及如何在函数声明中使用__attribute__((unused))来屏蔽未使用的警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过大第一个原因是包含了符号表,这个可以通过strip删除,文件大小会立即缩水。strip命令提供了不同参数,方便可选择的删除。
除此之外,两个编译参数“-ffunction-sections”和“-fdata-sections”,以及链接参数“-Wl,--gc-sections”可用来删除没有使用到的符号,“-Wl,”表示后面是传递给链接器ld的参数。
objcopy也可用来删除一些未用的数据。


相关的:
-Wl,--version-script=export.lds
__attribute__ ((visibility ("hidden")))
readelf -s
readelf -S


gcc屏蔽“unused warn”,使用“__attribute__((unused))”,如:
static int __attribute__((unused)) my_function();
注意应用在函数声明,而不是定义处,如果有声明的话。
### PE文件压缩工具与瘦身方法 对于PE文件的压缩和瘦身需求,存在多种工具和技术可以帮助实现这一目标。以下是几种常见的工具及其功能描述: #### 1. **UPX (Ultimate Packer for eXecutables)** UPX 是一种高效的可执行文件压缩工具,广泛应用于Windows平台上的PE文件压缩。它通过无损压缩技术减少文件体积而不影响其功能性。使用 UPX 压缩后的文件会在运行时解压到内存中,从而保持原有性能[^1]。 ```bash upx --best yourfile.exe ``` 此命令将以最高压缩级别对 `yourfile.exe` 进行压缩。 --- #### 2. **ASPack** ASPack 是另一种流行的PE文件压缩工具,支持更高的压缩率以及一定的保护机制。它可以有效减小文件小并提供一定程度的安全防护措施来防止逆向工程[^5]。 --- #### 3. **Petite** Petite 是一款轻量级的EXE压缩器,专注于最小化文件尺寸。虽然它的压缩比率可能不如UPX高,但对于特定场景下的小型应用程序非常适用[^1]。 --- #### 4. **Resource Hacker 结合手动调整** 有时可以通过删除不必要的资源(如图标、字符串表或其他未使用的部分)来显著缩小PE文件小。利用 Resource Hacker 工具打开PE文件后,可以选择性地移除不需要的内容或替换较的资源项为更紧凑的形式[^5]。 --- #### 5. **GCC 编译参数优化** 如果是从源码重新生成PE文件,则可通过调整 GCC编译选项进一步控制最终输文件小。例如,启用链接时间优化 (`-flto`) 和去除调试符号 (`-s`) 可幅削减二进制体积[^3]: ```bash gcc -Os -s -o output.exe source.c ``` 此处 `-Os` 表示优先考虑代码尺寸而非速度;而 `-s` 参数会剥离所有符号信息以节省空间。 --- #### 6. **SquashFS 对于 Linux Live 镜像中的应用** 尽管主要针对Linux环境设计,但 SquashFS 提供了一种高压缩比的方式来打包文件系统图像。这种方法理论上也可间接适用于某些类型的跨平台部署方案,在创建定制化的ISO镜像过程中尤为有用[^2]。 --- ### 注意事项 需要注意的是,过度依赖外部压缩可能会引入额外开销甚至潜在风险——比如增加启动延迟或是降低兼容性等问题。因此实际操作前应充分评估利弊关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值