Qt學習筆記之——生成exe可執行檔案並打包生成安裝軟體
之前用MFC生成過安裝檔案,今天想嘗試採用Qt生成的exe檔案打包並生成安裝軟體。
開始我認為比較簡單,但是嘗試過程中遇到了很多問題。下面一一列出來
首先:我認為,要完成一個軟體,應儘可能的使用Release版本檔案,當然了,可以現在Debug版本下除錯通過再進行測試 打包 生成。
原因是,Debug版本會編譯生成很多中間結果。
舉個例子,可以看到,用Qt Creator編譯器執行生成的exe可執行檔案時,如果用Debug模式生成的可執行檔案會比較大。我用一個簡單的程式測試Debug模式有417KB
而切換到Release模式下只有19KB,較大的檔案就更不用說。
而且,更要命的是,生成的exe檔案拷貝到其他電腦上時,並不能直接執行。還需要新增很多dll動態連結庫檔案。
可以看到在Qt中debug版本的dll會很大很大,比如
通過對比發現debug模式下的dll有時甚至有100+MB,所以在後面的打包釋出時候,會造成安裝軟體很大,非常不便。
所以,一定得切換到release版本下執行,並打包釋出!!!
2、生成一個exe可執行檔案之後,把這個exe檔案拷貝到其他電腦上面執行。
必然會要求我們新增很多dll比如上面列舉出來的dll,這些dll都在Qt安裝包bin資料夾下面。
其他的可能在Windows/System32裡面
在不確定呼叫到哪些dll時,使用軟體Dependency Walker檢視具體應用情況。如下圖所示:
這裡就要求呼叫這幾個DLL
其中QT5CORE.DLL等等前三個和最後兩個都在Qt安裝檔案bin資料夾下。
而第四第五個檔案在System32下
將exe檔案和這幾個檔案拷貝到同一個資料夾下並拷貝到另外一臺電腦上執行時還是會報錯。報錯內容是:
This application failed to start because it could not find or load the Qt platform plugin “windows” Reinstalling
the application may fix this problem. balabalabala.....................
或者是:
等等。還有icudt51.dll icuin51.dll icuuc51.dll libEGL.dll檔案等等
開始在網上看到還要新增platforms中的qwindows.dll.結果添加了之後還是報錯。(platforms資料夾也在Qt安裝包中),最後發現,是需要新建一個資料夾名字為platforms。資料夾中的內容為qwindows.dll。至此,程式終於可以在另外一臺電腦上運行了!
具體如下:
但是,實際的安裝軟體中exe檔案圖示都比較好看
其實,Qt中可以在編譯的時候得到!
具體操作如下:
在Qt Creator的幫助索引中查詢Setting the Application Icon關鍵字,這裡列出了在Windows上設定應用程式圖示的方法,主要的步驟如下:
(1) 首先準備一個.ico圖示檔案(假定為musicmaker.ico),並將其複製到工程目錄(.pro檔案所在的目錄)
(2) 然後在QT Creator選擇檔案選單中的新建檔案或專案,在彈出的新建對話方塊中選概要,文字檔案,名稱填寫為.rc檔案(如pynxl.rc),在檔案中寫入該行:
IDI_ICON1 ICON DISCARDABLE "musicmaker.ico"
(3) 編輯專案檔案,即.pro檔案,在最後面新增下面一行程式碼:
RC_FILE = musicmaker.rc
(4) 重新編譯程式,可以看到視窗的左上角的圖示已經更換了,然後檢視一下release資料夾中的檔案,可以看到現在的exe檔案也更換了新的圖示。
得到的結果如下:
最後就是打包了。
打包使用NSIS+NSIS Edit
下面是轉載,不過本人已親測好用!點選這裡。
準備檔案 以下是我即將打包的所有檔案,安裝包目錄結構(包括:可執行程式、外掛庫、執行時庫、授權檔案、解除安裝程式圖示等等!)如下圖所示: 1、利用嚮導製作安裝包: 2、填寫應用程式基本資訊 3、指定安裝程式所用選項 注意:這裡選擇語言為SimpChinese 4、設定應用程式安裝目錄與授權檔案5、指定應用程式檔案 6、指定建立應用程式圖示
7、選擇安裝程式完成後執行的動作
8、指定接觸安裝程式屬性 9、進行指令碼編譯、儲存
10、等待編譯完成,即可執行打包後的安裝包 大功告成之後,即可進行安裝! (1)安裝程式 (2)此處顯示授權檔案中的內容 (3)選擇安裝目錄 (4)執行程式,並顯示“自述檔案” (5)執行結果
關於Qt的打包工具瞭解一些,個人感覺NSIS用起來比較順手,指令碼修改起來也方便,所以就推崇一下
到此,所有關於Qt的移植和安裝軟體結束,may help~~~2014.07.21