2013-01-23 90 views
4

我真的沒有在Windows上開發的東西的經歷,我可能已經錯過了一些明顯的事情,儘量保持冷靜:)可以使用壓縮的dll(s)嗎?

我有一個應用程序(Qt的C++),它使用了一些.dll期從自己的路(我意味着我將這些.dll與.exe一起提供)。當我交付應用程序時,我通過upx壓縮dll。它顯着壓縮它們,我可以使用這些dll而不需要解壓縮。

我的印象是,我做錯了什麼,但它只是偶然的工作,所以我想確定,使用壓縮的DLL可以嗎?或者我應該在任何時候預期不可預知的問題? (這是主要問題

如果.dll s可以在壓縮模式下使用,那麼爲什麼地球我們會首先解壓縮它們。

+0

Windows本身不支持壓縮的DLL。如果您遇到問題,您需要與UPX製造商聯繫。你爲什麼要首先壓縮你的dll?你的節目如此巨大? (PS:Windows可以配置爲壓縮目錄)。 –

+0

其實我的程序很小,但它所依賴的dll很大,所以用戶不想下載一個小實用程序的50mb ... – destan

回答

5

這不是偶然的工作,UPX旨在壓縮Win32-PE(以及許多其他格式),無論是可執行文件還是DLL。

「可以嗎?」,當然,只要你沒有違反另一方的許可證,它當然是「OK」。 這對於與Qt相關的任何事情都不太可能發生,但原則上這是一種可能性。例如,一個可能使用,例如使用某些具有許可證條款的DLL,例如「以二進制形式分發,等等,不允許修改」。比如說,像MSVC或DirectX可再發行組件,或某種圖形卡供應商的專有API。無論如何,記住這一點並不是一個錯誤,並且在之前檢查許可證有可能違反它們。

措辭你的問題「可以嗎?」略有不同:「明智嗎?」,答案是:可能不是。磁盤上的幾兆字節通常並不重要。當你將所有東西打包成安裝程序,並且用戶通過互聯網下載時,數據會被壓縮,所以在這方面也是一樣的。

但是,無論您使用UPX還是其他可執行打包程序或Windows的文件系統壓縮,壓縮都會產生副作用。它會導致額外的地址空間碎片化,它會禁用異步傳輸,並且會喪失操作系統從工作集丟棄DLL頁面的能力,並在訪問時透明地從PE映像重新加載它們。

這最後一句是指操作系統必須使頁面文件的分配,這必須寫網頁的網頁文件時,你的進程工作集被移出以騰出空間給別的東西。沒有其他辦法。現在如果用戶禁用了頁面文件...

相關問題