最簡單的打包發佈Qt應用(Windows,Linux)

Qt Linux Windows Vi 吃貨程序員 吃貨程序員 2017-10-12

最簡單的打包發佈Qt應用 (Windows,Linux)

最簡單的打包發佈Qt應用(Windows,Linux)

一、打包發佈Windows 版Qt應用

1、把編譯的應用 主程序(例如 myqtapp.exe) 複製 到 另一簡單起名的文件夾,例如 c:\myapp

(把應用所需的SQLite等數據庫也一同放入)

2、從Qt安裝文件夾中複製工具windeployqt.exe 到 c:\myapp

(工具文件原位置可能是 C:\Qt\Qt5.8.0\5.8\mingw53_32\bin)

3、進入命令提示符,並進入 文件 夾 c:\myapp

c:

cd myapp

4、然後使用 windeployqt 工具命令:

windeployqt myapp.exe

工具運行結束後,文件夾裡看到 windeployqt 工具自動複製的插件文件夾和 dll文件、qm文件等。

5、把 c:\myapp 整個文件 打包,就是所需。

二、打包發佈Linux 版Qt應用

1、把編譯的應用 主程序(例如 myqtapp) 複製 到 另一簡單起名的文件夾,例如 主目錄下 ~/myapp

(把應用所需的SQLite等數據庫也一同放入,或者放入程序代碼指定的位置,例如 /var/opt內的位置,程序使用的普通圖片,按代碼指定也放入指定位置或 ~/myapp內,例如,我的是放在 ~/myapp/images)

2、程序需要用到的各個插件也從Qt安裝目錄中複製到主程序目錄內

(例如在 /opt/Qt5.8.0/5.8/gcc_64/plugins ,我用到 platforms 、 sqldrivers 和 imageformats,其中 platforms我只用到 libqxcb.so,則platforms夾內需libqxcb.so一個文件即可,sqldrivers是SQLite,Mysql驅動,imageformats是圖片調用需要)

3、複製必須的 庫文件 ,先建立 腳本(cplib.sh),

vi ~/myapp/cplib.sh

內容是:

#!/bin/bash

LibDir=$PWD"/lib"

Target=$1

lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))

$(mkdir $LibDir)

for Variable in ${lib_array[@]}

do

cp "$Variable" $LibDir

done

終端下執行命令:

cd ~/myapp

chmod +x cplib.sh

./cplib.sh myqtapp

完成後,可以見到在 ~/myapp目錄內生成lib目錄,內有主程序需用到的多個庫文件,從中取出必要的部分,不需要全部文件

建立 ~\qtlib文件夾,從 ~/myapp/lib 內複製以下必需庫文件:

libicudata.so.56、libicui18n.so.56、libicuuc.so.56、libQt5Core.so.5、libQt5DBus.so.5、libQt5Gui.so.5、libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5、libQt5Widgets.so.5件和文件名中包含xcb的全部文件,例如 libX11-xcb.so.1、libxcb.so.1等

(libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5這些是我的主程序使用,自動找到,如沒有對應功能,則沒有對應文件)

4.複製 libqxcb.so 需要的庫文件

先把 cplib.sh 複製 一份 ,放入 ~/myapp/platforms,然後

cd ~/myapp/platforms

./cplib.sh libqxcb.so

完成後, ~/myapp/platforms目錄內生成lib目錄,內有libqxcb.so需用到的多個庫文件,從中取出必要的部分,不需要全部文件,也是複製 到 ~\qtlib文件夾

libQt5DBus.so.5、libQt5XcbQpa.so.5、和文件名中包含xcb的全部文件。

5.目標機器安裝 qtlib

把 qtlib 文件夾內容 放入 /usr/local/lib/qtlib

sudo權限 在/etc/ld.so.conf.d 下增加文件 usr-libs.conf

內容 是

/usr/local/lib/qtlib

然後 執行 sudo ldconfig

6.最後檢查是否缺少 其他庫文件,在終端下 運行 主程序

如沒有 正常運行,會有出錯信息提示,查看其中 的 庫文件名 libXXXX.so.XX,在Qt的安裝目錄 中找文件

例如在:/opt/Qt5.8.0/5.8/gcc_64/lib

要注意的是區分所複製出來的文件不能是鏈接文件同,要找到真正的庫文件,複製 到 /usr/local/lib/qtlib ,並重命名這庫文件 在出錯信息中顯示的正確的文件名

重新執行 sudo ldconfig

重複 這第6步,直到能正常啟動主程序,一般情況 下經過前面5步後,正常方式 執行應用(myqtapp)或應用啟動器(myqtapp.desktop)後,沒有正常顯示出畫面,才需要這第6步。

7. 最後, ~/myapp文件夾 就是 應用程序包含文件,一般安裝放入 /opt/myapp內,有變動的文件安裝一般放入/var/opt/myapp內,必需的Qt庫文件一般安裝放入 /usr/local/lib/qtapp(參照第5步),目標機器上就安裝完成,最後,建立桌面啟動器(其中 指定了 圖標)

vi myqtapp.desktop

內容是

[Desktop Entry]

Version=1.0

Name=myqtapp

GenericName=myqtapp

Comment=myqtapp

Exec=/opt/myapp/myqtapp

Icon=/opt/myapp/images/myapp.ico

Terminal=false

Type=Application

Categories=Application;

StartupNotify=true

Terminal=false

X-Desktop-File-Install-Version=0.22

8.打包,安裝 都完成了。

相關推薦

推薦中...