當我使用VS2013中的C++運行時庫的靜態鏈接時,是否有任何方法可以降低構建大小?降低構建大小
我的原始文件只有15kb,但我無法在我的其他電腦上運行它,但沒有丟失.dll消息彈出。我決定使用靜態鏈接,現在的大小是〜100kb。
我正在使用Windows.h
標題和WinAPI函數。
當我使用VS2013中的C++運行時庫的靜態鏈接時,是否有任何方法可以降低構建大小?降低構建大小
我的原始文件只有15kb,但我無法在我的其他電腦上運行它,但沒有丟失.dll消息彈出。我決定使用靜態鏈接,現在的大小是〜100kb。
我正在使用Windows.h
標題和WinAPI函數。
如果你只顯示一個消息框,你並不需要鏈接到任何靜態庫。
#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,所以它不應該要求任何額外的東西即使是最運行赤裸裸的骨骼系統)。
由於你的主要目的是保持大小的控制,dll
是要走的路。
至於你的失蹤dll有關它可以解決。 如果您使用的是標準libary缺失錯誤,那麼在您正在運行應用程序的機器上安裝可再發行組件是個好主意。
我想讓人們在運行我的程序時不必下載這些麻煩。靜態鏈接只鏈接必要的庫或一切嗎? –
然後你不能節省exe的空間! –
如果不使用MFC等,你可以
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
,以減少代碼的大小
我不認爲這會縮減代碼的大小 - 這是一種縮短編譯時間的舊的,現在毫無意義的方式:http://blogs.msdn.com/b/oldnewthing/archive/2009/11/30/9929944的.aspx –
是從窗戶缺少DLL或您自己的? –
它可能會變得更小,但很難在沒有看到源代碼的情況下對細節進行猜測。 –
@JerryCoffin這是一個簡單的Message Box,上面寫着「Hello World」。 –