CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何尽可能减小release版本的exe文件的大小?

楼主xqchang()2003-06-03 13:50:44 在 VC/MFC / 基础类 提问

有好的办法吗?在编译和连接时需要加什么参数吗?(加壳的不算) 问题点数:20、回复次数:10Top

1 楼zhangnanonnet(鱼欢)回复于 2003-06-03 14:10:24 得分 0

没有你所谓的好办法,最好的办法是使用好的算法,删除冗余部分,尽量减少代码行数,提高你的代码效率Top

2 楼winthegame(120斤重的大青蛙)回复于 2003-06-03 14:12:53 得分 0

在Link   中把   ignore   all   Default   libarary   勾上,在手动输入link   的lib,   MSVCRT.LIB   kernel32.lib   user32.lib   然后其它你要用的lib.   最后在Link   的   Project   Options   里面加  
  /ALIGN:4096,   编译会有警告提示,不管它,看看尺寸。  
   
  减小大小可能会有错误出现,慢慢试试喽。Top

3 楼pzichen(我不做技术好多年)回复于 2003-06-03 14:54:26 得分 0

再有,想想一定要用到静态连接来编译吗?Top

4 楼xqchang()回复于 2003-06-03 17:52:01 得分 0

我的程序没有用到MFC库,能否再减小?Top

5 楼prettywolf(多情自古空余恨,此恨绵绵无绝期)回复于 2003-06-03 19:31:12 得分 20

怎样使用   Visual   C++   编译出只有   1536   字节的窗口程序         doskey(收藏)  
  这个不是用MFC生成的。  
  怎样在VC生成的MFC代码的基础上,加入一些设置,使生成的可执行文件体积最小。  
  其实有些在MFC下同样适用。  
  //题目:怎样使用   Visual   C++   编译出只有   1536   字节的窗口程序    
  //这些技巧都是dREAMtHEATER老大哥告我的……    
  //编译出来后,文件大小为:   1536   字节    
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //预处理    
  #include   <Windows.h>    
  #include   "stdafx.h"  
  //使用了下面的预处理,编译连接时必须是   Release   方式,否则不能通过    
   
   
  //自定义程序入口,如果要优化,推荐使用这个    
  //如果使用   VS.NET,也可以这样设置:在“解决方案管理器”里选定项目,右击,选择“属性”->“链接器”->“高级”->“入口点”    
  //VC   6里面也有类似的设置,但具体不记得了    
  //项目属性的其它设置可以仔细看看,其它优化也都在这里可以设置    
  #pragma   comment(linker,   "/ENTRY:EntryPoint")    
   
   
  //下面是调整段对齐,默认是   4K,在   Win98   下能更快地装入   PE   文件,但会增加   PE   文件的大小    
  //下面这一行在这里好像会说是“无效的指令”什么的,故在这里也注释掉了,也许是段太小的原因吧。    
  //直接在工程选项里面设置:项目“属性”->“链接器”->“优化”->“Windows98   优化”->“否   (/OPT:NOWIN98)”    
  //#pragma   comment(linker,   "/OPT:NOWIN98")    
   
   
  //下面的优化是段合并,不推荐使用,在很多程序里也许也许不能使用    
  #pragma   comment(linker,   "/SECTION:MiniPE,")                           //创建自定义的   MiniPE   Section    
  #pragma   comment(linker,   "/MERGE:.data=MiniPE")     //合并.data   Section   到   MiniPE   Section    
  #pragma   comment(linker,   "/MERGE:.text=MiniPE")     //合并.text   Section   到   MiniPE   Section    
  #pragma   comment(linker,   "/MERGE:.rdata=MiniPE")   //合并.rdata   Section   到   MiniPE   Section    
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
   
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //全局变量    
  HWND                                                                         g_hWnd;                   //主窗口句柄,一般程序中经常用到此变量,故使用全局变量    
  HINSTANCE                                                               g_hInst;                 //应用程序进程句柄,一般程序中经常用到此变量,故使用全局变量    
   
  const   char                                                             c_szAppName[]   =   "MiniPE";    
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
   
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //函数声明    
  LRESULT   CALLBACK   WindowProc(HWND   hWnd,   UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam);    
  int   WINAPI   WinMain(HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,   LPSTR   lpCmdLine,   int   iCmdShow);    
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
   
   
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //入口函数    
  //使用我们自己的入口函数,而不用连接器默认提供的一大堆程序初始化操作的代码    
  //为了在一个普通的   Win32SDK   程序里能使用这种方法,下面的函数将调用   WinMain()   函数,并给出相应的参数    
  void   EntryPoint()    
  {    
                ExitProcess(WinMain(GetModuleHandle(NULL),   NULL,   GetCommandLine(),   SW_SHOWNORMAL));    
  }    
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
   
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //主函数    
  int   WINAPI   WinMain(HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,   LPSTR   lpCmdLine,   int   iCmdShow)    
  {    
                MSG                                                                                           sMsg;    
                WNDCLASSEX                                                             sWndClassEx;    
   
   
                g_hInst   =   hInstance;    
   
                sWndClassEx.cbSize   =   sizeof(WNDCLASSEX);    
                sWndClassEx.style   =   CS_VREDRAW   |   CS_HREDRAW;    
                sWndClassEx.lpfnWndProc   =   (WNDPROC)   WindowProc;    
                sWndClassEx.cbClsExtra   =   0;    
                sWndClassEx.cbWndExtra   =   0;    
                sWndClassEx.hInstance   =   g_hInst;    
                sWndClassEx.hIcon   =   LoadIcon(NULL,   IDI_APPLICATION);    
                sWndClassEx.hCursor   =   LoadCursor(NULL,   IDC_ARROW);    
                sWndClassEx.hbrBackground   =   (HBRUSH)   (COLOR_WINDOW);    
                sWndClassEx.lpszMenuName   =   NULL;    
                sWndClassEx.lpszClassName   =   c_szAppName;    
                sWndClassEx.hIconSm   =   NULL;    
                RegisterClassEx(&sWndClassEx);    
   
                g_hWnd   =   CreateWindowEx(0,   c_szAppName,   c_szAppName,   WS_OVERLAPPEDWINDOW,    
                                CW_USEDEFAULT,   CW_USEDEFAULT,   CW_USEDEFAULT,   CW_USEDEFAULT,    
                                NULL,   NULL,   g_hInst,   NULL);    
                ShowWindow(g_hWnd,   iCmdShow);    
                UpdateWindow(g_hWnd);    
   
                while   (GetMessage(&sMsg,   NULL,   0,   0))    
                {    
                                TranslateMessage(&sMsg);    
                                DispatchMessage(&sMsg);    
                }    
                return((int)   sMsg.wParam);    
  }    
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
   
   
   
  ////////////////////////////////////////////////////////////////////////////////////////////////////    
  //主窗口回调函数    
  LRESULT   CALLBACK   WindowProc(HWND   hWnd,   UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam)    
  {    
                switch   (uMsg)    
                {    
                case   WM_DESTROY:    
                                PostQuitMessage(0);    
                                break;    
   
                default:    
                                return(DefWindowProc(hWnd,   uMsg,   wParam,   lParam));    
                }    
                return(0);    
  }    
  ////////////////////////////////////////////////////////////////////////////////////////////////////  
  Top

6 楼xqchang()回复于 2003-06-04 14:43:28 得分 0

感谢prettywolf(多情自古空余恨,此恨绵绵无绝期),我晚上回来就试。还以为没人回答了哩,谢谢!Top

7 楼xqchang()回复于 2003-06-04 19:49:52 得分 0

我在连接时出现下面的错误提示,是什么意思?  
   
  Linking...  
  LIBC.lib(crt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _main  
  Release/mServer.exe   :   fatal   error   LNK1120:   1   unresolved   externals  
  Error   executing   link.exe.Top

8 楼felics(felics)回复于 2003-06-04 20:35:16 得分 0

1。编译选项中有最小尺寸选项  
  2。尽量用函数,少用宏Top

9 楼xqchang()回复于 2003-06-04 20:59:20 得分 0

?Top

10 楼xqchang()回复于 2003-06-04 22:23:16 得分 0

upTop

相关问题

  • 如何使DELPHI最后生成的EXE文件减小??
  • 如何减小生成的exe文件大小
  • 如何减小 PBL 文件
  • 用delphi编译生成的EXE文件都比较大,怎样有效减小他的大小
  • 如何减小 log 文件的大小?
  • 怎么减小flash文件的大小?
  • 怎样设置,才能在打包之后,把C++Builder生成的“可独立执行”的EXE文件尺寸减小为最少????
  • exe文件
  • exe文件
  • Debug文件夹和Release文件夹中的exe文件除了大小还有什么不同?

关键词

  • visual c++
  • win98
  • 编译
  • 文件
  • 优化
  • 属性
  • 代码
  • 连接
  • 项目
  • minipe

得分解答快速导航

  • 帖主:xqchang
  • prettywolf

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo