gcc 编译c文件为exe 太大了,怎么变小。

如何用控制台创建c语言的exe文件 阅读详情
AI摘要

本文介绍了如何通过GCC编译器的优化选项(-O2,-s,-flto)以及静态链接来减小C文件编译出的EXE大小,同时推荐了UPX工具进行进一步压缩,展示了从55k减小到8k的过程。,

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编译器有一些选项可以帮助减小生成的可执行文件的大小。以下是一些步骤:

  1. 使用优化级别 -O2 或 -O3。这些优化级别会尝试减小代码的大小并提高执行速度。
  2. 使用 -s 选项来去除符号表信息。
  3. 使用 -flto 选项来启用链接时优化。
  4. 使用静态链接。动态链接的库可能会增加可执行文件的大小,因为它们需要包含额外的信息来找到和链接动态库。静态链接可以通过 -static 选项启用。
  5. 使用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。

【ARM 嵌入式 编译系列 10.1 -- GCC 编译缩减可执行文件 elf 文件大小】 移除符号表,文件会变小很多,但是用objcopy移除上面几个个 section,节省不了多少空间。到目前为止,文件越来越小,节省了大量的空间。现在我们把符号表移除了,2 个 section不见了,section 从。当然了,这种操作其实没必要,对于大型程序而言,用。的介绍,我们看下如何进一步缩小可执行文件。已经将 可执行文件 test 的大小从。能不能进一步缩减可执行文件的 size 呢。那么接下来如何处理呢?都是可以移除,移除后的信息如下,此时的可执行程序test已经从。可执行程序再次减小了,从。 阅读详情

相关推荐

【ARM 嵌入式 编译系列 10 -- GCC 编译缩减可执行文件 elf 文件大小】

2)修改/etc/sysctl.conf文件【sudo vi /etc/sysctl.conf】,添加需要保存的路径【kernel.core_pattern = /tmp/corefile/core.%e.%t】A: 通常我们会首先移除了debug信息,移除了符号表信息,同时我们还希望万一出事了,比如coredump了,我们能获取更多的信息。在开发过程总,总是希望编译出来的可执行文件尽量小,因为这样可以节省更多的磁盘空间,先看第一个问题,移除debug相关信息的影响。文件的时候,我们可以打印出堆栈信息,

CodingCos的博客 1783

vc编译出来的exe太大----解决办法

1、编译时采用Release模式,这样比Debug模式小得多 2、右键工程-->属性-->配置属性-->C/C++ -->优化-->选择"使大小最小化" 3、若采用MFC:右键工程-->属性-->配置属性-->常规-->MFC的使用-->在共享DLL中使用MFC(相反在静态库中使用MFC会很大) 4、少使用资源文件,尽量使用较小的资源文件,若采用MFC,可以看看Res目录下的exe图标文件(

woshiyuanlei的专栏 3605

Android上运行gcc编译的exe文件

编译c程序生成可执行文件 user@thundersoft:~/data/work/media-ctl-97077a7$ gcc  main.c  options.c  v4l2subdev.c mediactl.c -o media.exe push到手机中运行提示没有这个文件或者目录 user@thundersoft:~/data/work/media-ctl-97077a7$ adb ...

SekFu的博客 1102

gcc减小生成程序的大小

编译参数CFLAGS: -O2 -ffunction-sections -fdata-sections (去掉-g参数,不启动调试) 链接参数LDFLAGS: -Wl,-Map=object.map,--cref,--gc-section 通过上述参数,会在编译和链接是对代码进行优化。 把没有用到的函数全部裁剪掉,只保留有用的符号。 原本25M的程序在-g参数后的,编程37M。去掉-g,然后加上上面的参数,变为8.1M,缩减了很大的空间。 使用upx压缩可执行文件大小。 ...

duapple的博客 4924

【GCC编译优化系列】前后编译的两个版本固件bin大小不一样,怎么办?

这两天在论坛收到一个朋友的问题回答邀请,我仔细读了下该问题,跟我之前在论坛上发布的好几个问题关联还挺大的,所以抽空带着这个问题,重新梳理下思路,也希望这些思路能帮到这位朋友尽快解决问题。

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 8928

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

减小Gcc编译程序的体积

众所周知,Gcc编译的原始程序一般很大,其实有几种方法能大大减小目标代码的体积,一般有以下几种方法。 基本知识来源:http://www.mingw.org/wiki/Large_executables 1、禁用调试信息 Release编译时不要加上-g开关。 2、使用-Os编译程序。 不要使用-funroll-l...

weixin_30547797的博客 1442

comsol-声学

COMSOL多物理场仿真软件以高效的计算性能和杰出的多场耦合分析能力实现了精确的数值仿真,已被广泛应用于各个领域的科学研究以及工程计算,为工程界和科学界解决了复杂的多物理场建模问题。COMSOL内嵌的声学模块可以方便地进行多孔声学和粘热声学的模拟仿真。软件数值计算得到的云图,可以将声压、速度、声强以及声能耗散等结果可视化,十分有利于学生对声学的学习和理解。将COMSOL仿真引入实验当中,通过软件的可视化处理有效直观的展示复杂物理场和集合模型仿真的流程,与实验数据结合,使得文章内容具有说服力、预见性和新颖性。

y2715163545的博客 2373

gcc -c -o编译过程

gcc编译分步处理一、预处理二、编译三、汇编四、链接一步到位多模块编译一次性编译:独立编译: C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接。 分步处理 一、预处理 在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。 我们可以通过gcc -E 选项进行查看,如下所示: gcc -E m...

疯狂老司机的博客 1万+

PV-RCNN实战:如何在KITTI数据集上实现3D目标检测(附完整代码解析)

本文提供了在KITTI数据集上实战PV-RCNN 3D目标检测的完整指南,涵盖环境配置、数据预处理、模型训练与评估全流程。通过详细的代码解析和调参技巧,帮助读者掌握这一融合点与体素优势的经典3D目标检测模型,并实现从理论到实践的跨越。

weixin_29098391的博客 403

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 288

如何用gcc编译C代码

如何用gcc编译C代码 1、编写 hello word 的两种方法——现成编译器 这个方法大家都经常用,比如DEVCpp,Visual Studio 2017,Visual C++ 6.0等。 简单的输出“hello world”程序如下: #include <stdio.h> int main() { printf("hello world"); return 0; } 输出很简单,如下: 2、编写 hello word 的两种方法——gcc编译器 (1)首先进行环境配置(前提是已

weixin_44982036的博客 8663

同态加密与SEAL库实战:CKKS参数调优避坑指南

本文深入探讨了同态加密技术中CKKS方案的参数调优实践,重点解析了SEAL库中`poly_modulus_degree`、`coeff_modulus`和`scale`三大核心参数的配置技巧与避坑指南。通过实战案例展示了如何平衡计算深度、精度与性能,为开发者提供了一套完整的参数优化方法论,帮助避免常见的'scale out of bounds'等错误,显著提升同态加密应用的可靠性和效率。

weixin_29315569的博客 225

GCC 编译 C 语言文件

请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b)此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回主程序 main1.c,定义并赋值两整型变量,然后调用函数 x2x ,将 x2x 的返回结果printf出来请在 ubuntu 系统用 gcc 命令行方式编译主程序 main1.c 并运行;请在 windows 系统下用你熟悉的编译工具编译主程序 main1.c 并运行。

ppqppl的博客 3733

11、气动外形优化中的连续伴随方法

本文探讨了连续伴随方法在气动外形优化中的理论背景、实现和验证过程。通过使用DLR的FLOWer求解器,将伴随方法应用于Euler和Navier-Stokes方程,以高效计算成本函数梯度,从而显著减少优化过程中的计算成本。文章还介绍了该方法在RAE2822翼型和ONERA M6机翼等案例中的应用,并展示了其准确性和效率。未来展望包括扩展到复杂流动模拟和多学科优化。

desk3的博客 165

21、博弈中的对抗搜索算法解析

本文深入解析了博弈中的对抗搜索算法,涵盖极小极大算法、阿尔法-贝塔剪枝、移动排序与换位表等核心技术。文章分析了算法的数学基础与实现机制,探讨了其在国际象棋、围棋等复杂游戏中的应用,并扩展至多人游戏中的联盟与合作行为。通过对比不同类型策略的优劣,展示了对抗搜索在实际博弈系统中的演进方向与优化路径,为人工智能决策提供了理论支持与实践指导。

rust6ferris的博客 127

GCC编译器——利用GCC编译器编译C/C++程序

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 5728

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 481

Ubuntu系统使用gcc编译c程序

Ubuntu系统使用gcc编译c程序在虚拟机上写一个Hello World程序Ubuntu环境配置使用root 用户登录使用vi编写一个hello.c文件调用自定义头文件编写sub1.c编写sub1.h编写main1.cgcc直接编译在Windows下编译运行main1.c 在虚拟机上写一个Hello World程序 Ubuntu环境配置 虚拟机软件:Vmware 系统版本:Ubuntu 18.04 安装好Vmware和Ubuntu 18.04的映像文件之后,打开Vmware,选择左上角新建虚拟机,选择下载

wanerXR的博客 7792

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

windows通过gcc编译c语言

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。 GCC是自由软件过程发展中的著名例子,由自由软件...

qq_39982584的博客 3867

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怎样用gcc编译c语言,使用GCC编译C语言程序

使用Eclipse CDT开发C语言程序,虽然使用很方便,效率也很高,但是它向我们隐藏了很多细节。虽然大多数时候这并不影响我们的开发,但是当我们需要对程序的编译链接过程进行更加特殊的控制,以获得可以满足特殊要求(例如,对程序进行优化、附带调试信息等)的程序的时候,就需要直接调用编译器程序进行编译链接,从而可以使用编译器所提供的丰富的编译选项,以达到对编译器的行为进行灵活控制,得到我们想要的个性化的...

weixin_39627361的博客 2271

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件

linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件

weixin_46838716的博客 3136

使用GCC和Makefile编译c文件

使用GCC和Makefile编译c文件

山有木兮 1682

使用gcc编写c语言程序,利用GCC工具编译C语言程序

本帖最后由 没有你 于 2020-4-18 16:22 编辑一般我我们在计算机进行C语言编程,大都是使用现成的IDE进行编程,比如codeblock。只要程序写好之后,按下build按键,程序就会被编译和运行。如果仔细研究其编译过程的话,就会涉及到编译器的东西。很多IDE都内置了编译器,最典型的就是GCC。GCC是一个开源的强大编译器,可以编译多种语言,比如C、C++、java等。如果电脑系统是L...

weixin_39805119的博客 2197

C语言怎么生成exe文件

本文介绍了如何将C语言程序编译成EXE文件,并提供了一个贪吃蛇游戏的实现示例。主要内容包括: Windows下生成EXE的两种方法: 使用MinGW(GCC)编译 使用Visual Studio(MSVC)编译 跨平台交叉编译为Windows EXE的方法 贪吃蛇游戏涉及的知识点: C语言基础(变量、数组、函数等) 控制台操作(屏幕刷新、键盘输入) 游戏逻辑(运动、碰撞检测等) 提供了一个完整的贪吃蛇游戏代码示例,可直接编译为EXE运行 文章既有技术指导,又包含实际应用案例,适合初学者学习C语言程序编译和游

weixin_73200325的博客 2602

GCC编译器

在Linux中,使用最多的编译工具无疑是GCC(GNU Compiler Collection,GNU编译器套件)。1. 开源与自由GCC是GNU项目的一部分,遵循GNU通用公共许可证(GPL),这意味着它是完全开源和免费的。这种开放性吸引了大量的开发者和用户,促进了GCC的普及和发展。2. 跨平台支持GCC支持多种操作系统和硬件架构,包括Linux、Windows、macOS等,以及从x86到ARM等多种处理器架构。这种广泛的兼容性使得GCC成为跨平台开发的首选编译器。3. 语言支持丰富。

dcq715的博客 3648
上一篇: 如何把c++文件通过cmake编译为dll文件
下一篇: 使用Bash/Shell脚本获取Docker Swarm 服务和任务副本的IP地址以及宿主机的IP地址
topcss
博客等级 码龄18年 24粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值