2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 银河麒麟踩坑笔记——打包QT程序

银河麒麟踩坑笔记——打包QT程序

时间:2019-11-25 04:44:53

相关推荐

银河麒麟踩坑笔记——打包QT程序

背景:

出于项目需要,因为银河麒麟的环境配起来太繁琐太麻烦了,最近被要求在银河麒麟 v10系统+4000CPU环境下,将已经配好QT、达梦数据库环境的QT程序打包,为方便移植到其它的麒麟机子上使用。本来以为是很轻松的事,没想到在银河麒麟下遇到了各种问题,调了好几天才搞定。

当前系统环境:

麒麟v10 + 4000型号CPU + QT5.12 + 达梦8数据库这些是已经配置好的环境

尝试的方法:

一、linxudeployqt第三方工具

该方法网上有很多教程,感兴趣的可以尝试一下,例如:/zyhse/article/details/106381937

我一开始就是按照这个方法做的,不知道是因为我的机子环境配的不好还是什么问题,中途会遇到很多命令缺失的问题,一个个把命令安装好之后,最后一步打包时会报错Exec fomat什么的错误,网上也查不到,最终放弃

二、利用脚本文件打包

该方法大致参考/pozhu15/p/12903672.html但是最终会有链接不上数据库的报错,具体可以参照下面我的步骤解决该问题。

1.在桌面新建package文件夹

2.将QT项目以release版本运行,会在项目同级目录下生成一个文件夹,例如

build-xxxx-Desktop_Qt_5_12_8_MSVC_64bit-Release

3.进入该文件夹,把其中的可执行文件复制到package文件夹内

4.在package文件夹内,新建copylib.sh文件,并且升级权限

sudo chmod 777 copylib.sh

5.在copylib.sh中加入内容

#!/bin/bashLibDir=$PWD"/lib"Target=$1lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))$(mkdir $LibDir)for Variable in ${lib_array[@]}docp "$Variable" $LibDirdone

6.保存后执行./copylib.sh giptables,这一步之后文件夹内会生成lib文件

7.进入生成的lib文件夹,把其中所有文件都复制到package文件夹内

8.进入QT安装目录,找到platforms文件夹,将该文件夹复制到package文件夹内

9.将之前的copylib.sh复制到package的platforms文件夹内,执行./copylib.sh libqxcb.so,得到一个新的lib库文件夹

10.将上一步新得到的文件夹内所有文件复制到package文件夹内,然后删除上一步生成的platforms下的lib文件夹

11.在package文件夹内新建xxxx.sh脚本文件,xxxx为自己的项目名,然后赋权限

sudo chmod 777 xxxx.sh

12.在xxxx.sh中加入代码

#!/bin/shappname=`basename $0 | sed s,\.sh$,,`dirname=`dirname $0`tmp="${dirname#?}"if [ "${dirname%$tmp}" != "/" ]; thendirname=$PWD/$dirnamefiLD_LIBRARY_PATH=export PATH=export LD_LIBRARY_PATH$dirname/$appname "$@"

注意:其中PATH和LD_LIBRARY_PATH的值自己填,根据QT中自己的环境信息进行修改,这也是数据库为什么会连接失败的原因。具体打开QT——项目——run——run environment中找自己的环境变量

13.在package文件夹下执行./xxxx.sh即可运行,复制package文件夹到其他主机也可以运行,但是最后一步的PATH和LD_LIBRARY_PATH要根据不同主机进行修改。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。