QT 動態/靜態編譯 === QT 的編譯都是動態編譯,也就是編譯出來的 exe 要使用時都需要額外的動態連結函式庫(Dynamic-link library,DLL),雖說 QT 有提供 `windeployqt` 工具可以自動打包(自動把需要的相依函式庫給拉進來),但主管要求能直接包成一個檔案就能執行且方便 demo,還好找到解決方法就是**靜態編譯**啦!! 這邊先簡單介紹 `windeployqt` 如何使用,目前較新版本的 QT 在 bin 資料夾內都會有 `D:\QT\5.15.2\msvc2019_64\bin\windeployqt.exe`,要使用的話先將專案編譯後產出的 exe 單獨拉出來放一個資料夾,直接執行如圖上指令就會自動將所需的檔案拉到 exe 當下資料夾內,可以直接執行 exe 囉! ![](https://i.imgur.com/AhZox6C.png) :::warning 當出現 **qt 無法找到程序輸入點** 其原因主要為使用 windeployqt 所自動載入的 dll 不同,以我自己測試為例子因為程式編寫是採用 MSVC 編譯但 windows 系統環境上的 QT 路徑 MinGW 所以採用自動載入它都幫我載入 MinGW 的 dll 導致出現問題。 目前解決方法就是透過手動方式將所需要的 dll 複製進去惹... ::: ## Static Complier 靜態函式庫就是編譯出來的 exe 內包含所需的其他函式庫檔案(因此 exe 會比一般的還大) **此步驟不確定是否要做,但我是有先做啦** 找到 `D:\QT\5.15.2\Src\qtbase\mkspecs\common\msvc-desktop.conf` 並將以下修改 ``` ## 原始 QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd ##修改 QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT QMAKE_CFLAGS_DEBUG = -Zi -MTd ``` D為動態(Dynamic),而T則為靜態(Static) **指令解析與步驟** 找到 `D:\QT\5.15.2\Src` 內有 `configure.bat` ``` 首先 configure.bat -static -prefix "D:\qt" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp configure.bat -static // 靜態編譯 -prefix "D:\qt" // 欲安裝目錄 -confirm-license -opensource // 開源版本QT -debug-and-release // 編譯 debug 與 release,也可以單獨選 -platform win32-msvc // 使用 MSVC 編譯,這裡的 win32 不是指 32 bit -nomake examples // 不編譯 smaple -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg // 插件 -opengl desktop // 用系統自帶 opengl -mp // 多核編譯 第二步 nmake 或者使用 D:\QT\Tools\QtCreator\bin\jom.exe (多核心去執行大約 20 幾分鐘跑完) 第三步 nmake install ``` 開啟 `X64 Native Tools Command for VS 2019` -> 64 bit,在這執行上面指令就能編譯 64 bit 開啟 `X86 Native Tools Command for VS 2019` -> 32 bit,在這執行上面指令就能編譯 32 bit 接著要設定 QT Creator 首先開啟 QT 專案,然後在 Qt Versions 新增,選取剛剛編譯好的 qmake.exe ![](https://i.imgur.com/4eKwNp7.png) 會像下圖所示~~ ![](https://i.imgur.com/Ra837eK.png) 剛剛上面步驟要先按確定,接著在 Kits 內新增,在 Qt Versions 就會出現剛剛新增的 msvc_static_64 ![](https://i.imgur.com/4YfIXWQ.png) 按確定後旁邊就會出現剛剛手動新增的 kits,就可以做靜態編譯啦~ ![](https://i.imgur.com/ULQ4mRt.png) ## 參考 >Qt最新版5.14在Windows环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 32 bit/64 bit:https://last2win.com/qt-5.14-static-link/#qt-creator