Что произошло при создании общей библиотеки?

#c #windows #visual-studio #shared-libraries #static-libraries

#c #Windows #visual-studio #разделяемые библиотеки #статические библиотеки

Вопрос:

Я использую Windows, и в моем проекте 100 статических библиотек, и размер каждой из них составляет около 10 МБ. Я назвал эти 100 библиотек, как показано ниже:

 lib1.lib
lib2.lib
...
lib100.lib
  

Я использую command link.exe /OUT:sum.dll lib1.lib lib2.lib ... lib100.lib /ERRORREPORT:QUEUE /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:"D:/path/to/sum.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:/path/to/sum.lib" /MACHINE:X64 /machine:x64 /IGNORE:4006 /IGNORE:4098 /IGNORE:4217 /IGNORE:4221 /DLL для создания общей библиотеки в режиме выпуска.

Я получил sum.dll размер около 50 МБ.

Затем я использую command lib.exe /OUT:libsum.lib lib1.lib lib2.lib ... lib100.lib для создания статической библиотеки в режиме выпуска.

Я получил libsum.lib размер около 1000 МБ.

Я знаю, что статическая библиотека просто архивирует все связанные библиотеки. Но почему размер libsum.lib намного больше, чем sum.dll ? Что произошло во время сборки? sum.dll

Комментарии:

1. Каков размер sum.pdb?

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

3. В режиме выпуска нет sum.pdb. @ssbssa

4. Ваша используемая команда имеет /PDB:"D:/path/to/sum.pdb" , поэтому я предположил, что sum.pdb также создан.

5. Не могли бы вы подробнее рассказать о причине, по которой dll удаляет функции и данные, которые не используются? Когда я создаю dll, программы, использующие эту dll, не определены. @drescherjm