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

背景:

出于项目需要,因为银河麒麟的环境配起来太繁琐太麻烦了,最近被要求在银河麒麟 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要根据不同主机进行修改。

你可能感兴趣的:(银河麒麟,kylin,qt)