Выпуск LIB огромен по сравнению с отладкой - PullRequest
6 голосов
/ 12 января 2010

У меня есть проект статической библиотеки со стандартными опциями сборки отладки / выпуска. Я был заинтригован, заметив, что, хотя отладочный .lib довольно большой 22Mb, релиз - колоссальные 100Mb. И это тоже не огромная кодовая база, около 75 классов, и ни один из них не очень гигантский.

Мои вопросы: нормально ли это, и должен ли я заботиться?

Ответы [ 7 ]

4 голосов
/ 12 января 2010

Я бы проверил, статически ли вы связываете библиотеки в режиме выпуска и динамически связываете их в режиме отладки. Например, вы можете статически связывать среду выполнения C ++.

3 голосов
/ 15 января 2010

У меня была такая же проблема. Исправить это очень просто. Свойство проекта / Свойства конфигурации / Общие / Оптимизация всей программы использовать Нет Оптимизация всей программы вместо Использовать генерацию временного кода связи . Размер моей статической библиотеки уменьшился с 5 МБ до 1,3 МБ

1 голос
/ 12 января 2010

Возможно ли, что огромное количество этого кода встроено, а отладочная версия не является "встроенной"?

1 голос
/ 12 января 2010

Нет, это не нормально. Это должно быть наоборот. Да, ты должен заботиться.

Вначале я бы снова посмотрел на размеры, чтобы убедиться, что я как-то не транспонировал размеры выпуска и отладки.

Затем посмотрите на библиотеки, которые вы связываете для выпуска и отладки. Вы случайно связали библиотеку отладки с кораблем и библиотеку отладки?

Внимательно посмотрите ваши настройки для выпуска и отладки. Происходит что-то очень подозрительное.

1 голос
/ 12 января 2010

В идеале выпуск lib должен быть меньше отладочного.

Полагаю, вы статически связываете других библиотек, таких как MFC, ATL и т. Д ...

проверьте ваш релиз и отладьте настройки сборки.

используйте #pragma once, чтобы избежать многократного включения файла.

0 голосов
/ 12 января 2010

Есть одна вещь, которая может объяснить такой размер: символы отладки, встроенные в сборку релиза (в отличие от сборки как pdb). Вы уверены, что у вас нет отладочных символов, генерируемых для вашей сборки выпуска? (какой Visual C ++ вы используете?)

0 голосов
/ 12 января 2010

Как правило, я ожидаю обратного ...

Возможно ли, что внутри блоков, включенных в препроцессор, имеются большие полосы кода, которые включаются только в сборки выпуска?

Код шаблона особенноПодозреваю, что в этом случае.

Обновление

Я думаю, что проблема, скорее всего, вызвана ссылками на статические библиотеки в режиме выпуска и общими библиотеками в режиме отладки..

+ 1 Каробертс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...