搜尋此網誌

工商服務

2009年3月4日 星期三

[Qt密技]執行Qt程式時找不到相關dll檔該怎麼辦?





Qt程式在散佈之後可能會遭遇無法正確執行的窘境,問題就出在找不到程式本身所需的動態連結程式庫(dll)檔案。解決方法有二:

一、將Qt工具靜態編譯,這樣開發出來的程式就會內含所需的程式庫;好處是執行檔是獨立的一整包,缺點則是執行檔會因此很龐大,而且日後想要更新程式庫必須重新建置執行檔。

二、因為程式庫被建置成動態連結的分享方式,所以在部署時必須把所需的dll檔案放到該執行檔找得到的地方;這樣子的好處是執行檔會小很多,而且隨著日後程式庫的升級,程式效能也會跟著提升;更重要的是可以維持Qt 4.5新的LGPL授權方式,保有是否開放原始碼的主控權。

針對第二種解決方案,以此處於Qt 4.4環境下執行的範例程式為例,只要將缺少的mingwm10.dll(15.5KB)、QtCored4.dll(17.8MB)和QtGuid4.dll(64.3MB)跟執行檔放置在一起即可,不過Qt程式庫之所以會這麼龐大,是因為它們是包含偵錯資訊的版本(所以在版本數字4前面有個「d」字樣),如果是發行版本的程式庫,其大小則分別只有QtCore4.dll(2.53MB)和QtGui4.dll(9.94MB);或者索性將程式庫通通放置到C:\WINDOWS\System系統路徑底下,然而缺點則是因為系統路徑是優先搜尋的路徑,所以如果程式在編譯時所採用的Qt版本與程式庫的不相同,照樣會發生錯誤,以筆者的電腦為例,上頭有三套Qt 4.x的環境,就經常會發生這種版本錯亂的問題,呵呵。



連結:Qt 4.4技術文件〈Deploying Qt Applications〉
連結:Qt 4.5技術文件〈Deploying Qt Applications〉

【2009.03.06 updated】
【2009.04.15 updated】
【2009.04.17 updated】

沒有留言:

張貼留言