背景:
出于项目需要,因为银河麒麟的环境配起来太繁琐太麻烦了,最近被要求在银河麒麟 v10系统+4000CPU环境下,将已经配好QT、达梦数据库环境的QT程序打包,为方便移植到其它的麒麟机子上使用。本来以为是很轻松的事,没想到在银河麒麟下遇到了各种问题,调了好几天才搞定。
当前系统环境:
麒麟v10 + 4000型号CPU + QT5.12 + 达梦8数据库 这些是已经配置好的环境
尝试的方法:
一、linxudeployqt第三方工具
该方法网上有很多教程,感兴趣的可以尝试一下,例如:https://blog.csdn.net/zyhse/article/details/106381937
我一开始就是按照这个方法做的,不知道是因为我的机子环境配的不好还是什么问题,中途会遇到很多命令缺失的问题,一个个把命令安装好之后,最后一步打包时会报错Exec fomat什么的错误,网上也查不到,最终放弃
二、利用脚本文件打包
该方法大致参考https://www.cnblogs.com/pozhu15/p/12903672.html 但是最终会有链接不上数据库的报错,具体可以参照下面我的步骤解决该问题。
1.在桌面新建package文件夹
2.将QT项目以release版本运行,会在项目同级目录下生成一个文件夹,例如
build-xxxx-Desktop_Qt_5_12_8_MSVC2017_64bit-Release
3.进入该文件夹,把其中的可执行文件复制到package文件夹内
4.在package文件夹内,新建copylib.sh文件,并且升级权限
sudo chmod 777 copylib.sh
5.在copylib.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
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/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_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要根据不同主机进行修改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)