使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥
2007-03-17 21:26:43 来源:WEB开发网当你 DLL 装载的时候,_DllMainCRTStartup 是你DLL最开始执行的地方而不是 DllMain。LIBCTINY 首先检查是不是 DLL_PROCESS_ATTACH,如果是,就调用 _atexit_init,_initterm 呼叫所有的静态构造器。 而函数的核心是调用 DllMain, 它是你的 DLL 代码的一部分。
DllMainCRTStartup最后要做的是检查 DLL 是不是要DLL_PROCESS_DETACH。如果是,调用 _DoExit。如前所叙,它将调用静态析构器。如果你对控制台 和 GUI 模式的启动代码感到好奇,可以看看 CRT0TCON.CPP 和 CRT0TWIN.CPP(这些代码都有相应的下载,可以在文章的开始处找到)。 另外一个要做的事就是找到 DLLCRTO.CPP (Figure4) 中下面一行:#pragma comment(linker, "/OPT:NOWIN98")
上面一行直接告诉连接器使用 /OPT:NOWIN98 开关。它的好处是你不要手工的添加到 makefile 文件或者 工程文件,我要说明的是,如果你使用 LIBCTINY, 请务必打开 /OPT:NOWIN98 开关。
使用 LIBCTINY.LIB
使用 LIBCTINY.LIB 是很简单的。你所要做的就是将LIBCTINY.LIB 加入到你的连接库列表当中。如果你使用 Visual Studio IDE,那就加到 Projects | Settings | Link tab,你编译的二进制类型无所谓 (console EXE, GUI EXE 或 DLL),只要 LIBCTINY.LIB 有正确的入口就可以了。 看看 Figure5 中的 TEST.CPP。
程序代码中只使用了 LIBCTINY.LIB 所实现函数的很少一部分,并且包含了一个静态的构造器和析构器调用。当我用Visual C++ 6.0 的普通编译参数时:CL /O1 TEST.CPP
结果可执行文件有 32768 个字节。现在把 LIBCTINY.LIB 链接上,CL /O1 TEST.CPP LIBCTINY.LIB
最终的可执行文件只有 3072 个字节。
更多精彩
赞助商链接