|
打包发布 Linux版 QT 应用
把主程序 StarrliPOS 复制到一个空文件夹 linuxdeployqt ./StarrliPOS 如果运行出现缺少 so 运行库,则需要以下手工方式获取 1、把编译的应用 主程序(例如 starrlipos) 复制 到 另一简单起名的文件夹, 例如 主目录下 ~/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 starrlipos 完成后,可以见到在 ~/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 starrlipos.desktop 内容是 [Desktop Entry] Version=1.0 Name=starrlipos GenericName=StarrliPOS Comment=StarrliPOS Exec=/opt/myapp/starrlipos Icon=/opt/myapp/images/starrli.ico Terminal=false Type=Application Categories=Application; StartupNotify=true Terminal=false X-Desktop-File-Install-Version=0.22 8.打包,安装 都完成了。 |