第一次打包linux下的QML程序,一路磕磕绊绊,如果有更好的方式,欢迎留言。
1、使用release编译出可执行文件,这一步大家都知道吧;
2、将可执行文件放入新建文件夹project中,同时创建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" $LibDir
done
然后在文件夹目录中执行
./copylib 可执行文件
此时会多出一个文件夹lib,可执行文件用到的一些库会被塞进lib文件夹里,我们把lib/中的内容都拷贝到project中,即与lib同级目录,然后删除lib文件夹;
3、将copylib.sh复制到Qt/6.5.3/gcc_64/plugins/platforms目录中,执行
./copylib.sh libqxcb.so
此时会生成libqxcb.so的库文件,并存储在/platforms/lib中,此时将整个platforms文件拷贝到project文件中,并将Qt/6.5.3/gcc_64/plugins/platforms/lib与copylib.sh删除;
4、将project/platforms/lib中的文件都拷贝到project/中,并删除project/platforms/lib文件夹,到这一步,QWidget程序就可以运行了,但如果是QML,则需要继续;
5、将Qt/6.5.3/gcc_64/qml整个文件夹拷贝到project/下;
6、将Qt/6.5.3/gcc_64/plugins/xcbglintegrations整个文件夹拷贝到project/下;
7、将Qt/6.5.3/gcc_64/lib整个文件夹拷贝到project/下;
8、在project/下创建可执行文件.sh文件,内容如下:
#!/bin/shappname=`basename $0 | sed s,\.sh$,,`dirname=`dirname $0`tmp="${dirname#?}"if [ "${dirname%$tmp}" != "/" ]; thendirname=$PWD/$dirnamefiLD_LIBRARY_PATH=./libexport LD_LIBRARY_PATH$dirname/$appname "$@"