#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