Почему моя статическая библиотека такая огромная? - PullRequest
8 голосов
/ 26 июля 2010

У меня есть статическая библиотека, скомпилированная на С ++, около 15 классов и их функций-членов, и все скомпилировано, это почти 14 мегабайт.Он ссылается на библиотеку плотных хеш-таблиц Google и MPIR, которая похожа на GMP для Windows, но я сделал это в простом exe-файле, и это было несколько килобайт.Почему это так массивно?Что я могу сделать, чтобы уменьшить его размер?Кажется, что есть другие программы, которые намного сложнее моей, но гораздо меньше.

Скомпилированная с Visual C ++, командная строка:

/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE"
/D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t
/Zc:forScope /Fp"Release\ang.pch" /Fa"Release\" /Fo"Release\"
/Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue

1 Ответ

17 голосов
/ 26 июля 2010

Статическая библиотека значительно отличается от готового двоичного формата; частично, потому что у этого есть немного больше информации. По сути, статическая библиотека действует как ZIP-архив всех файлов .obj, сгенерированных из ваших модулей перевода. Это позволяет компоновщику выбрасывать неиспользуемые функции, а если вы используете LTCG, это позволяет инлайнеру принимать межмодульные решения и другие подобные оптимизации.

Кроме того, некоторые режимы компиляции будут встраивать символы отладки непосредственно в .lib, устраняя необходимость в отдельных файлах .pdb.

Как правило, вам не нужно беспокоиться о размере статической библиотеки; компоновщик выбросит всю дополнительную информацию при сборке финального исполняемого файла.

...