如何合并DLL到你的EXE程序中

方法/步骤

  1. 1

    用 VC++ 生成一个最简单的 Win32 Console Application,调用少量简单的 CRT 函数,因为要独立 EXE,所以使用 /MT,示例代码部分如下,然后 Release 编译看看体积。

  2. 2

    打开最小体积优化开关

    Project - Property - C/C++ - Optimization 将 Optimization 改为 Minimize Size (/O1),重新编译。

    现在大小是 40960 字节。

    可能是示例程序过于简单,所以此开关并没有产生实际的影响,但是在其它有需求的情况下是可以考虑使用它的,在复杂程序中开优化减小体积还是比较明显的,当然也要提防优化带来的问题。

  3. 3

    去掉 CRT 依赖

    这至少需要处理如下几点:

    自己指定程序入口点 Project - Property - Linker - Anvanced 在 Entry Point 那里填写你的新入口点函数,比如我写的是NewEntry,然后将 main 函数改成这个名字,比如void NewEntry()。

    自己实现用到的 CRT 函数 上面的程序里用到了strcpy,那么我们就自己来实现它,当然你用跟它相同的名字和声明实现一个函数是通不过编译的,VC 会报错error C2169: 'strcpy' : intrinsic function, cannot be defined,要解决这个问题需要关掉一个开关: Project - Property - C/C++ - Optimization 将 Enable Intrinsic Functions 设为 No。

  4. 4

    加壳压缩

    使用比如 UPX,ASPack 等加壳工具对可执行程序进行压缩。

    但是实际发现,在 EXE 文件特别小时,比如像上面已经精简到 3584 字节后,再使用 ASPack 工具压缩会反而令 EXE 文件更大。

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。