2014-01-06 106 views
0

當我使用VS2013中的C++運行時庫的靜態鏈接時,是否有任何方法可以降低構建大小?降低構建大小

我的原始文件只有15kb,但我無法在我的其他電腦上運行它,但沒有丟失.dll消息彈出。我決定使用靜態鏈接,現在的大小是〜100kb。

我正在使用Windows.h標題和WinAPI函數。

+0

是從窗戶缺少DLL或您自己的? –

+0

它可能會變得更小,但很難在沒有看到源代碼的情況下對細節進行猜測。 –

+0

@JerryCoffin這是一個簡單的Message Box,上面寫着「Hello World」。 –

回答

1

如果你只顯示一個消息框,你並不需要鏈接到任何靜態庫。

#include <windows.h> 

void entry(void) {  
    MessageBox(NULL, "Hello, World!", "", MB_OK); 
    ExitProcess(0); 
} 

編譯和鏈接使用VC++ 2013,用下面的命令行:

CL/O1/GS- hello32.c /鏈接/ NODEFAULTLIB /條目:進入/子系統:視窗USER32的.lib KERNEL32.LIB

至少對我(與VC++ 2013年)產生的2560個字節的可執行文件(僅依賴核心的Windows DLL,所以它不應該要求任何額外的東西即使是最運行赤裸裸的骨骼系統)。

1

由於你的主要目的是保持大小的控制,dll是要走的路。

至於你的失蹤dll有關它可以解決。 如果您使用的是標準libary缺失錯誤,那麼在您正在運行應用程序的機器上安裝可再發行組件是個好主意。

Redistributable for VS2013

+0

我想讓人們在運行我的程序時不必下載這些麻煩。靜態鏈接只鏈接必要的庫或一切嗎? –

+0

然後你不能節省exe的空間! –

0

如果不使用MFC等,你可以

#define WIN32_LEAN_AND_MEAN 
#include <Windows.h> 

,以減少代碼的大小

+0

我不認爲這會縮減代碼的大小 - 這是一種縮短編譯時間的舊的,現在毫無意義的方式:http://blogs.msdn.com/b/oldnewthing/archive/2009/11/30/9929944的.aspx –