Mar*_*ett 5 c++ windows dll linker mfc
我在Windows上有一个C++/MFC应用程序 - 动态链接它只有60kb静态它> 3Mb.
它是通过电子邮件分发给客户的,因此需要尽可能小.
它静态链接MFC和MSCVRT库 - 因为它修复了一些问题,我不想要更多关于缺少库的支持调用 - 特别是非常有用的'应用程序配置不正确'一个!
反正有剥离Windows exe的所有额外的MFC东西是dll,但我没有使用?
或者告诉它动态链接MSVCRT(必须存在)但静态链接MFC dll可能不是?
编辑 - 感谢将其降至1.6Mb,这将是必须的!
你不能混合使用CRT/MFC dll.从记忆中走出来......
正如另一个答案所示,您可以#define WIN32_LEAN_AND_MEAN和VC_EXTRALEAN.这些可能无济于事.它们倾向于最小化构建时间 - 而不是最终的exe大小.
没有重建MFC(这是一个选项 - 你可以重建它/ Os,或者如果你感觉非常厚颜无耻,/ GL - 但这可能会带来更多的下游乐趣 - 希望它已经建成/ Gy).
好.简单的事情要尝试.使用/ GL/Os/GF/Gy/GA构建您的应用程序.在链接器中,您或多或少需要/ OPT:REF和/ OPT:ICF和/ LTCG.
我不得不说 - 从30k到兆字节的版本构建有点多.你也可以传递/映射到链接器,看看是什么占据了所有空间 - 但这是非常非常的.
听起来好像MFC不是用/ Gy构建的 - 但这会令人惊讶.
对于使用 CRT 的程序,您可以使用Per Vognsen 视频中的技术实现 3.5KB 可执行文件。Windows\System32\msvcrt.dll
自 95 年以来的每个 Windows 都附带,因此通过链接到它,您无需将 Visual C++ Redistributable 与您的应用程序打包在一起。
基本流程是:
dumpbin
上System32\msvcrt.dll
和管道到一个文件awk '{print $4}'
) 来创建一个msvcrt.def
文件lib
在msvcrt.def
生成msvcrt.lib
/NODEFAULTLIB
在link
命令行上)/GS-
并删除所有/RTC<x>
标志)链接kernel32.lib
和msvcrt.lib
和瞧,您的小可执行文件除了操作系统之外还具有零依赖性。
(注意:要针对大小 ( /O1
)进行优化,请memset
按照此处的详细说明指定为内在函数。)
归档时间: |
|
查看次数: |
6102 次 |
最近记录: |