Почему моя статическая библиотека так огромна?

У меня есть C++, скомпилировал статическую библиотеку приблизительно 15 классов и их функций членства и материала, и скомпилировал, это - почти 14 мегабайтов. Это связывается с плотной библиотекой и MPIR хеш-таблицы Google, который похож на 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
8
задан Martin B 26 July 2010 в 15:19
поделиться

1 ответ

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

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

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

17
ответ дан 5 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: