导读:
前面有人说了,VC编译出来的东西为什么大,因为有Runtime Library,不管你要不要,都给你塞进去。所以,想减肥就要替换RTL。
这个问题,你如果看看MSDN里关于VC LINKER的文档,你就会知道是怎么回事,该怎么做啦。
下面这段程序,1、用自己程序中的入口替换RTL中的WinMainCRTStartup
2、连接时指定段以512字节的边界对齐(缺省是4K)
3、连接时合并数据段和Raw data段到代码段。
这样生成的可执行文件大小为1K。
在命令行下,连接命令为:
cl/O1 /Zl smallwinexe.cpp /link /align:0x200 /nodefaultlib /entry:WinMainCRTStartup /me
rge:.data=.text /merge:.rdata=.text user32.lib kernel32.lib
源程序
//smallwinexe.cpp
#include "windows.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MessageBox(NULL,"Hello,world!","SmallEXESize",MB_OK);
return 0;
}
void _cdecl WinMainCRTStartup( void )
{
int mainret;
char *lpszCommandLine;
STARTUPINFO StartupInfo;
lpszCommandLine = GetCommandLine();
if ( *lpszCommandLine == '"' )
{
while( *lpszCommandLine && (*lpszCommandLine != '"') )
lpszCommandLine++;
if ( *lpszCommandLine == '"' )
lpszCommandLine++;
}
else
{
while ( *lpszCommandLine > ' ' )
lpszCommandLine++;
}
本文转自
http://topic.csdn.net/t/20030123/08/1385043.html
前面有人说了,VC编译出来的东西为什么大,因为有Runtime Library,不管你要不要,都给你塞进去。所以,想减肥就要替换RTL。
这个问题,你如果看看MSDN里关于VC LINKER的文档,你就会知道是怎么回事,该怎么做啦。
下面这段程序,1、用自己程序中的入口替换RTL中的WinMainCRTStartup
2、连接时指定段以512字节的边界对齐(缺省是4K)
3、连接时合并数据段和Raw data段到代码段。
这样生成的可执行文件大小为1K。
在命令行下,连接命令为:
cl/O1 /Zl smallwinexe.cpp /link /align:0x200 /nodefaultlib /entry:WinMainCRTStartup /me
rge:.data=.text /merge:.rdata=.text user32.lib kernel32.lib
源程序
//smallwinexe.cpp
#include "windows.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MessageBox(NULL,"Hello,world!","SmallEXESize",MB_OK);
return 0;
}
void _cdecl WinMainCRTStartup( void )
{
int mainret;
char *lpszCommandLine;
STARTUPINFO StartupInfo;
lpszCommandLine = GetCommandLine();
if ( *lpszCommandLine == '"' )
{
while( *lpszCommandLine && (*lpszCommandLine != '"') )
lpszCommandLine++;
if ( *lpszCommandLine == '"' )
lpszCommandLine++;
}
else
{
while ( *lpszCommandLine > ' ' )
lpszCommandLine++;
}
本文转自
http://topic.csdn.net/t/20030123/08/1385043.html