開發環境系統版本::Ubuntu 16.04 LTS
程序測試環境系統版本:Ubuntu 16.04 LTS & Ubuntu Server 16.04
Qt版本:QT5.8.0
前言:前面寫了一篇Qt5動態發布的方法,可是測試中發現使用起來還是很復雜,我的程序涉及到數據庫,websocket,tcp等,組件太多,程序雖然能正常運行,但是數據庫無法連接,必須要安裝Qt5和MySQL的驅動才可以。所以繼續研究qt的靜態發布。
qt靜態發布網上有眾多教程,官網也有一個教程linux-deployment,巴特,沒一個現在還能用的。官網的教程不能使用我認為還是有原因的,我搞到最后才發現,這可能就是企業版和開源免費版的區別。
下面進入正題,我分享一下我這一個星期摸索的成果。目前實現了靜態發布之后的程序,在相同版本Linux和server上能夠直接運行,不需要安裝任何東西。
1 靜態編譯Qt
首先需要下載qt的源碼:qt-everywhere-opensource-src-5.8.0.tar.gz,解壓在某個目錄下。
然后從Terminal進入該文件夾。
輸入指令:
./configure --help
會看到一堆幫助文檔,可以對著幫助文檔把自己不需要的部分刪掉,刪除的方法就是后面的,不編譯或者跳過。編譯的東西越多越容易報錯,不同版本的幫助文檔也不相同。
然后輸入以下指令:
sudo ./configure -prefix /home/qking/Documents/Qt5.8.static -continue -opensource -confirm-license -static -no-opengl -sql-mysql -no-compile-examples -no-dbus -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland
只解釋幾個重要的:
- -prefix /home/qking/Documents/Qt5.8.static 是指定靜態庫安裝目錄
- -continue 有錯誤也盡量繼續編譯
- -static 靜態編譯
- -no-opengl 不要opengl
- -skip 跳過后面的模塊
反正,哪里有問題,你就看自己會不會用到,用不到就到幫助文檔里找以下怎么跳過。
下一步就是執行:
sudo make
過了很久之后,沒有error,就執行make install
靜態編譯qt會很艱難,有什么問題互相交流吧。
marke一個環境變量的配置,不曉得是不是必需的,如果后面的步驟出現什么問題,可以試一下。
QTDIR= /home/qking/Documents/Qt5.8.static
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/global:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
2 靜態編譯程序
上面完成之后就可以靜態編譯程序了,首先設置qt creator,引入我們的靜態庫。
2.1 添加靜態庫
點擊tool-options-Build&Run,然后選擇Qt Versions
選項卡:
點擊add,到靜態庫的哪個安裝目錄下,找到bin/qmake,添加進來:
復制下面的Versionname后面的內容。
選擇Kits
選項卡,點擊add:
在name
那一欄粘貼剛才復制的名字,檢查一下Qt Version
是不是靜態庫的,然后點擊旁邊的Make Default
設置為默認。
2.2 靜態編譯程序
首先打開自己的工程目錄,刪掉后綴為.pro.user
和.pro.user.677b2d5
的兩個文件,第二個可能是相似。然后重新使用qt打開工程,它就會提示你重新選擇編譯所用的kits,選擇靜態的就好了。
然后編譯程序,編譯出的就是靜態的程序,只將可執行文件拷出來就可以在其他電腦上執行。文件大小在M以上,動態的一般只有幾百K。
參考文獻:
Qt 官網
Linux 下 靜態編譯Qt程序
拜謝各位大神,希望大家多多交流。