можно ли использовать сжатые библиотеки DLL?

Мне очень не хватает опыта в разработке вещей на Windows, и, возможно, я пропустил некоторые очевидные вещи, постарайтесь сохранять спокойствие :)

У меня есть приложение (Qt C ++), которое использует некоторые .dll из своего собственного пути (я имею в виду, что я доставляю эти .dll вместе с .exe). Когда я доставляю приложение, я сжимаю библиотеки DLL с помощью upx. Это сильно сжимает их, и я могу использовать эти dll без распаковки.

У меня такое впечатление, что я делаю что-то не так, но это срабатывает случайно, поэтому я хотел убедиться, можно ли использовать сжатую dll? Или мне следует ожидать непредсказуемых проблем в любое время? (Это главный вопрос)

Если .dlls можно использовать в сжатом режиме, то зачем нам вообще их несжатые?


person destan    schedule 23.01.2013    source источник
comment
Windows сама по себе не поддерживает сжатые библиотеки DLL. Если у вас возникла проблема, вам придется обратиться к производителям UPX. Зачем вообще нужно сжимать DLL? Ваша программа такая огромная? (PS: Windows можно настроить на сжатие каталогов).   -  person Simon Mourier    schedule 23.01.2013
comment
на самом деле моя программа крошечная, но библиотеки, от которых она зависит, большие, поэтому пользователи не захотят загружать 50 МБ для крошечной утилиты ...   -  person destan    schedule 23.01.2013


Ответы (1)


Это не то, что «работает случайно», UPX предназначен для сжатия Win32-PE (и многих других форматов), будь то исполняемые файлы или библиотеки DLL.

Что касается «Это нормально?», ну да, конечно, «ОК», если вы не нарушаете лицензию другой стороны. Это маловероятно, если что-то связано с Qt, но в принципе возможно. Можно, например, использовать некоторые библиотеки DLL, у которых есть пункт лицензии, такой как «распространение в двоичной форме, бла-бла, изменение запрещено». Скажем, что-то вроде распространяемого пакета MSVC или DirectX или проприетарного API какого-либо поставщика видеокарты. В любом случае не будет ошибкой помнить об этом и проверять лицензии перед, рискуя нарушить их.

Формулировка вашего вопроса «Это нормально?» немного отличается: «Это разумно?», ответ: вероятно, нет. Несколько дополнительных мегабайт на диске обычно не имеют большого значения. Когда вы упаковываете все в установщик, а пользователь загружает его через Интернет, данные в любом случае сжимаются, так что в этом отношении то же самое.

Однако сжатие, независимо от того, используете ли вы UPX или другой исполняемый упаковщик, или сжатие файловой системы Windows, имеет побочные эффекты. Это вызывает дополнительную фрагментацию адресного пространства, отключает асинхронную передачу и лишает операционную систему возможности отбрасывать страницы из DLL из рабочего набора и прозрачно перезагружать их из образа PE при доступе.

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

person Damon    schedule 23.01.2013