Размер библиотеки и исполняемого файла

Проверьте правильность строки подключения и при необходимости обновите строку подключения к базе данных. Используйте пользователя admin в строке подключения.

Попробуйте подключиться к базе данных с помощью SQL Server Management Studio или Azure Data Studio.

Изучите Web.Config и обновите информацию о соединении.

Убедитесь, что вы выполнили действия, описанные в этой документации.

10
задан Jeff Atwood 3 July 2012 в 04:56
поделиться

7 ответов

Существует дополнительная бухгалтерская информация в .lib файл, который не нужен для заключительного исполняемого файла. Эта информация помогает компоновщику найти, что код на самом деле связывается. Кроме того, отладочная информация может быть сохранена в .lib файл, но не в .exe файл (я не вспоминаю, где информация об отладке хранится для objs в библиотечном файле, это могло бы быть где-то в другом месте).

5
ответ дан 3 December 2019 в 18:36
поделиться

Статическая библиотека и по Windows и по Unix является набором .obj/.o файлов. Компоновщик смотрит на каждый из этих объектных файлов и определяет, необходимо ли для программы связаться. Если это не будет необходимо, то объектный файл не будет включен в заключительный исполняемый файл. Это может привести к исполняемым файлам, которые меньше затем библиотека.

Править: Как MSalters указывает в Windows VC ++, компилятор теперь поддерживает генерирующиеся объектные файлы, которые включают связывание на уровне функций, например, видят здесь. На самом деле, редактировать-и-продолжать требует этого, начиная с потребностей редактировать-и-продолжать смочь заменить самую маленькую часть исполняемого файла.

12
ответ дан 3 December 2019 в 18:36
поделиться

Статическая библиотека, вероятно, содержит несколько функций, которые никогда не используются. Когда компоновщик связывает библиотеку с основным исполняемым файлом, она видит, что определенные функции никогда не используются (и что их адреса никогда не берутся и хранятся в указателях функции), она просто выбрасывает код. Это может также сделать это рекурсивно: если функция () никогда не вызывается, и () называет B (), но B () иначе никогда не называют, это может удалить код для обоих () и B (). На Linux происходит то же самое.

4
ответ дан 3 December 2019 в 18:36
поделиться

Дополнительно к текущим ответам, компоновщику разрешают удалить функциональные определения, если у них есть код одинакового объекта - это предназначается, чтобы помочь уменьшить чрезмерно увеличивающиеся в размерах эффекты шаблонного кода.

0
ответ дан 3 December 2019 в 18:36
поделиться

Отказ от ответственности: Это было долгое время, так как я имел дело со статическим подключением, поэтому возьмите мой ответ с мелкой частицей соли.

Вы записали: Я думал, что это должно добавить непосредственно к исполняемому размеру, и финал exe размер должен быть больше, чем это?

Наивные компоновщики работают точно этот путь - назад, когда я делал разработку хобби для систем CP/M (давным-давно), это было настоящей проблемой.

Современные компоновщики более умны, однако - они только связываются в функциях, на которые ссылается исходный код, или как требуется.

0
ответ дан 3 December 2019 в 18:36
поделиться

Статическая библиотека должна содержать каждый символ, определенный в его исходном коде, потому что она могла бы быть связана в исполняемый файл, которому нужно просто что определенный символ. Но после того как это связано в исполняемый файл, мы знаем точно, какие символы заканчивают тем, что использовались, и которые не делают. Таким образом, компоновщик может тривиально удалить неиспользованный код, обрезав размер файла много. Точно так же любые дублирующиеся символы (что-либо, это определяется и в статической библиотеке и в исполняемом файле, в который она связана, объединяется в единственный экземпляр.

0
ответ дан 3 December 2019 в 18:36
поделиться

@All: Спасибо за указатели. @Greg Hewgill - Ваш ответ был хорошим указателем.Спасибо.

Ответ, который я узнал, был следующие:

1.) Во время здания Библиотеки, что происходит, то, если опция "Keep Program debug databse" в MSVC (или что-то одинаково) будет идти, затем то библиотека будет иметь эту информацию об отладке, чрезмерно увеличивающую размер ее размера. но когда я статически включаю ту библиотеку и создаю исполняемый файл, компоновщик разделяет всю эту информацию об отладке из библиотеки прежде, чем генерировать exe, и следовательно exe размер является меньше, чем та из библиотеки.

2.) То, когда я отключил опцию "Keep Program debug databse", я получил библиотеку, размер которой был меньшим, чем заключительный исполняемый файл, который был тем, что я думал, является nromal в большинстве ситуаций.

- AD

0
ответ дан 3 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

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