最近項目需求使用到Qt,由於Qt默認編譯出來的程序是動態庫,發布的時候依賴庫太多,所以想編譯一個靜態的Qt。不扯了,入題
靜態的Qt
1.版本選擇
5.9.2版本,堅持最新--5.9.1版本中存在相機使用時主線程超過300毫秒Qt內部會返回錯誤(CameraBin error: "Internal data flow error."
)導致相機停止工作,Qt官方在5.9.2已處理。
2.編譯過程 (建議看下官方的編譯文檔, )
2.1:從Qt官網下載源代碼: https://www.qt.io ---我下載的是: qt-everywhere-opensource-src-5.9.2.tar.xz
2.2 :
解壓:
終端命令: xz -d qt-everywhere-opensource-src-5.9.2.tar.xz
終端命令: tar -xvf qt-everywhere-opensource-src-5.9.2.tar
2.3 編譯的過程( configure , make, make install)如下操作;
終端命令: sudo apt-get install build-essential libgl1-mesa-dev 至於為什么見官方文檔 http://doc.qt.io/qt-5/linux.html
進入剛解壓的目錄:終端運行: ./configure --help 查看配置的參數
這里不多強調:注意下面的參數使用及作用
-prefix <dir> ...... The deployment directory, as seen on the target device. [/usr/local/Qt-$QT_VERSION, $PWD if -developer-build] ---->安裝目錄自行指定 /home/xx/qtstatic
-static .............. Build static Qt libraries [no] (yes for UIKit) -------->靜態編譯必須指定
-fontconfig .......... Enable Fontconfig support [auto] (Unix only) ------>如果GUI界面支持中文必須指定這個參數,由於剛開始編譯沒指定,導致重新編譯--欲哭無淚
//以下6行是網上查找資料
由於加上-fontconfig編譯項后,在編譯過程中可能會出錯,提示fontconfig未通過,這是由於缺少freetype相關頭文件造成的,所以首先要保證freetype開發庫已經安裝:
終端命令: sudo apt-get install libfreetype6-dev
安裝后發現freetype頭文件沒在標准路徑,於是做軟鏈接
終端命令: sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype
另外還需要安裝fontconfig開發庫
終端命令: sudo apt-get install libfontconfig1-dev
由於項目中要使到多媒體中相機功能 必須指定 -gstreamer 且插件必須安裝否則相機無法使(defaultServiceProvider::requestService(): no service found for - org.qt-project.qt.camera)
我使用的是 1.0版本
終端命令:
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad
sudo apt-get install libpulse-dev
插件等安裝好后執行:
終端命令:
./configure -prefix /home/tzw/qtstatic -confirm-license -opensource -c++std c++11 -platform linux-g++-64 -release -static -qt-sqlite -fontconfig -gstreamer 1.0 -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon-x11
確保:
Fontconfig ............................. yes
GStreamer 1.0 .......................... yes
PulseAudio ............................. yes
然后 終端命令:
make
等待漫長的幾個小時;編譯完成后執行:
make install
完成后配置環境變量: 修改/home/你的名字/.profile文件,這是個隱藏文件(ls -a就會顯示出來),在文末加入
QTDIR=/home/xx/qtstatic
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
保存重啟下;
qmake -v 看下版本
編譯 靜態 Qt程序
1.比如現在有一個test.cpp文件
2.生成.pro文件
qmake -project
3.修改.pro文件,在里面加上
CONFIG+=static
4.生成Makefile文件
qmake
5.修改Makefile文件,在CXXflags選項后面加上 -static
6.生成可執行二進制文件
make