拿來主義——QT靜態編譯配置

0.寫在前面

QT的動態鏈接編譯着實是有點坑,最近我遇到了在win7_32環境下編譯後在win10_64不能運行的問題,反過來在win10下使用32位mingw編譯後卻可以在win7運行,當真是無語至極,迫不得已嘗試靜態編譯,那麼廢話不多說,接下來介紹如何最快地配置QT靜態編譯環境,測試版本QTcreater5.10.1+Qt5.12.1 MinGW。理論上其他版本是一個方法。

1.下載原版QT

首先的首先自然要有一個原版QT環境,這個教程很多了,我就不多說,請自行下載安裝,注意如果想要保住程序通用性的話,建議在win7_32位下使用32位的QT庫。最新版本的QT好像不自帶32位mingw了,不過沒關係,我們不用他原來的。

2.開始「拿來」——下載別人編譯好的

網上有些教程講靜態編譯是展示如何自行編譯qt源碼,這種方法一則流程繁複命令冗長容易出錯,二則編譯QT源碼實在耗時太長,有興趣的可以自己嘗試。我們在這裏使用別人編譯好的來用,從而省去了最爲耗時的一步。感謝各路大神的勞動成果。

2.1檢查自己的QT路徑

如果你已經安裝好了QT並且在安裝的時候選擇了配套安裝mingw的話,那麼此時你應當有這樣一個路徑:

其中我這裏的Qt5即爲安裝根目錄。

2.2下載已經編譯好的QT

自行在網絡上尋找QT靜態編譯版本,比如說我的靜態編譯版本便來自QTCN開發網
在這裏插入圖片描述
下載下來後一般最少有兩個文件夾,帶其他如mysql支持和openssl的可能有其他文件夾。
在這裏插入圖片描述
其中mingw開頭的文件夾和原版的作用雷同,Qt開頭static結尾的文件夾就是我們主要需要的。
將他們解壓。

2.2安裝與配置

安裝很簡單,將解壓後得到的至少兩個文件夾複製到原版QT的目錄下,複製後如下:
在這裏插入圖片描述
複製完後還要進行配置,不然直接在creator裏添加路徑會報錯。

2.2.1複製qt.conf文件

在原動態庫下的bin/文件夾中找到qt.conf文件,將它複製到靜態庫下的bin/文件中,這樣來讓qt「識別」你這個另外加進來的庫。

2.2.2編輯qmake.conf文件

在根目錄\5.10.1\mingw73_32_release_static\mkspecs\win32-g++下找到這個文件,找到 QMAKE_LFLAGS_DLL
將後面都改成 -static
再加一行 QMAKE_LFLAGS
後面也改成 -static
在新版本QT中沒有這些屬性,他們都在另一個文件中,被"include"了進來,如果找不到請根據具體路徑找到文件進行編輯,一般編譯好放出來下載的qt靜態庫這裏都是改好的。
改完後文件內容如下:
在這裏插入圖片描述

2.2.3複製qmlscene.exe

在原動態庫bin文件夾下複製這個文件到靜態庫bin文件夾下,否則creator會報qmlscene未安裝。

2.2.4複製Qt5Core.dll

在原動態庫bin文件夾下複製該文件到靜態庫lib文件夾下,否則報缺失錯誤。
該步存疑,我在安裝的時候沒有複製該文件也編譯成功了,網上其他講本機編譯源碼的教程有說要複製這個,可能是舊版本的原因。

3.在creator中選取已經配置好的庫

打開creator,點擊菜單欄工具>選項>kits,或者選項裏面的「構建與運行」,如下:
在這裏插入圖片描述
在該窗口上如下操作:
在這裏插入圖片描述
在這裏插入圖片描述
如果此前配置步驟做的正確的話,到這裏就可以正確導入庫,但是還差一步,使用他人編譯好的靜態庫,最好將編譯器和調試器設置爲配套的mingw,就是我們一直沒有使用的另一個不帶static的文件夾,如果沒有設置的話,在編譯過程中可能會報錯。添加兩器就不多說了,編譯器爲g++,調試器爲gdb,在bin文件夾下找到添加就行。

3.大功告成

到這裏,靜態庫就算安裝完成了,接下來就可以使用這個套件進行編譯,注意使用該配置的套件只能進行release編譯,debug會報錯,而且和原動態庫不能混用,也可能是我兩個mingw版本有差別的原因,我還是建議將靜態編譯只作爲最後一步在虛擬機裏面編譯一下就好,平常的編碼使用動態庫進行debug和release。