Есть ли способ уменьшить размер сборки, когда я использую статическую привязку для библиотек времени выполнения C++ в VS2013?
Мой исходный файл был всего 15 КБ, но я не смог запустить его на других компьютерах без появления пропущенного сообщения.dll. Я решил использовать статическое связывание, и теперь размер ~ 100kb.
Я использую заголовки Windows.h
и функции WinAPI.
Если вы собираетесь отображать MessageBox, вам не нужно ссылаться на какие-либо статические библиотеки.
#include <windows.h>
void entry(void) {
MessageBox(NULL, "Hello, World!", "", MB_OK);
ExitProcess(0);
}
Компиляция и связь с использованием VC++ 2013, со следующей командной строкой:
cl/O1/GS- hello32.c/link/nodefaultlib/entry: entry/subsystem: windows user32.lib kernel32.lib
По крайней мере, для меня (с VC++ 2013), который создает исполняемый файл из 2560 байт (который зависит только от основных DLL файлов Windows, поэтому он не должен требовать ничего лишнего для запуска даже на самой голой системе).
Поскольку ваша основная цель - держать размер под контролем, dll
- путь.
Что касается вашей пропавшей dll, то ее можно решить. Если вы используете стандартную ошибку, отсутствующую в библиотеке, тогда ее хорошая идея установить распространяемую версию на компьютере, на котором выполняется приложение.
Если вы не используете MFC и т.д., Вы можете
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
уменьшить размер вашего кода