1. 程式人生 > >初學Qt——程式打包(環境vs2012+qt5.1.0)

初學Qt——程式打包(環境vs2012+qt5.1.0)

說來可笑,網上那麼多的教程,偏偏結尾的時候就沒有一個能詳細的講下關於程式的釋出。開發Qt是這樣,剛開始做web也是這樣,因為是自學的,所以都沒人可以教下,結果到了專案完成的最後總是要花費成噸的時間去查資料,瞭解怎麼釋出打包這些,好了,廢話不多說,進入正題吧。
因為從沒開發過桌面程式,這是第一次開發,然後在對程式打包時就出現了一堆的問題。
1.我用的是vs2012+qt5.1.0開發,編譯時就是用release編譯了。因為我的電腦系統是64位的,所以當初安裝qt時就只下了個64位的qt。等到最後才知道,程式是32位還是64位,看的是你編譯環境 64位還是32位的。所以要打包32位程式的話一定要安裝32位的編譯環境。
2.當我們release成功後在release資料夾可以找到我們的.exe可執行檔案。這時我們在本機上開啟是可以執行成功的,那是因為我們的系統環境變數已經設定到關聯編譯環境的路徑了,這程式就會去那個路徑下讀取相關的dll檔案,而當我們把程式拷到其他電腦上時,它是找不到相關的dll檔案的,所以程式是打不開的。這裡我們可以去網上找一些測程式需要什麼dll檔案的程式,用它們來測試我們需要什麼dll檔案,然後在我們的機器上找到相關的dll檔案把它拷貝到存放.exe可執行檔案的資料夾下。
這裡我要提醒下,因為我之前把所有的dll檔案拷好了,拿到其他機器上執行時,它也不報程式錯誤,也執行不成功。最後我通過改本機的系統環境變數,才發現了問題的所在。
我們安裝的Qt程式中會有兩個資料夾,以我的電腦為例:
D:\Qt\Qt5.1.0x86\5.1.0\msvc2012\bin
D:\Qt\Qt5.1.0x86\Tools\QtCreator\bin
這兩個資料夾下都有相同的dll檔案,我開始時是拷貝了第一個資料夾的dll檔案,結果就是前面提到的程式不報錯誤,但也執行不成功。所以如果大家打包後程序跑不起來,可以去看看是不是編譯平臺下有相同dll檔案的不同資料夾,有的話如果一個不行就試試另一個
3.因為我們的環境是vs2012所以qt程式裡面有用到了一些vs的標準庫,所以我們也需要去c盤裡找到那幾個相關的dll檔案,我的程式裡面需要用到的有以下幾個dll:
msvcp100.dll、msvcp110.dll、msvcr100.dll、msvcr110.dll這幾個檔案,在我們的本機中可能會找到很多個,但並不是任何一個都可以用,這就需要慢慢去試了,不過我之前一直找不到正確的msvcp100.dll,最後是在測試機上下了個dll修復工具(不知道的百度還是騰訊的了,忘了),然後用它修復了那個dll,然後再去把這個dll檔案拷貝到,最後才行的。
當我們把所有的dll檔案放到可執行檔案的資料夾下後,程式就可以跑起來了,這時這個程式就是一個綠色版的了,然後詳細要去打包成安裝包,我這裡就沒去弄了,所以也不好多說。
然後dll檔案不是所有都放在可執行資料夾下的,比如我們用到了qt plugins 資料夾的的sqldirver資料夾裡的dll,這時我們只要把整個sqldirver資料夾拷貝進去就行了。
最後Qt程式主要的那些dll檔案其實都是一樣的,所以我在展示下我打包的程式裡面的dll結構吧。這裡面的platforms是一定要有的,沒有的話好像會跑不起來。