本文参考:打包QTlinux
如何在linux下打包免安装程序,程序名称(项目名称)为CoinFlip,QT版本是5.11.3,如下如出现这个名称,则一概替换成读者本身的应用程序名称。web
在上一步的文件夹中(工程用Release模式编译后的获得的文件夹build-CoinFlip-Desktop_Qt_5_11_3_GCC_64bit-Release)新建文件copylib.sh
打开终端进入当前文件夹,输入命令(新建文件命令)touch copylib.sh
vim
经过指令设置权限chmod 777 copylib.sh
打开终端进入当前文件夹,输入命令chmod 777 copylib.sh
bash
在 copylib.sh 中加入内容
打开终端进入当前文件夹,输入命令vim copylib.sh
,进入到copylib.sh文件中;
按下键盘上的 i 进入插入模式,将下述代码写入到文件中;
按下键盘上的esc(左上角的按键)退出插入模式
按下键盘上的 ":wq "(引号里面的这三个键) 保存退出app
#!/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
打开终端并进入到当前文件夹,输入./copylib.sh CoinFlip
其中, CoinFlip是运行copylib.sh 脚本的参数,脚本其实是调用了 ldd CoinFlip指令得到CoinFlip运行时须要哪些库,并将库都复制放到当前目录的lib文件夹中。
运行完上述指令后,同目录下会生成lib文件夹,这里咱们将其称做CoinFlip的库文件夹,避免与下文内容混淆svg
将CoinFlip的二进制文件和== CoinFlip的库文件夹==里全部的文件复制到coinflip文件夹(这个文件夹是笔者刚开始新建的文件夹,注意大小写)中,输入:
sudo cp -rf CoinFlip的库文件路径(源文件夹路径) coinflip文件夹路径(目标文件夹路径)
注意:这里是把lib里的全部文件复制出来,不用复制lib文件夹,源文件路径后面加上/*ui
将CoinFlip的二进制文件中的copylib.sh复制到QT的安装目录中的platforms文件夹,笔者的路径是:~/Qt5.11.3/5.11.3/gcc_64/plugins/platforms,输入:
sudo cp -rf CoinFlip的库文件路径(源文件路径) platforms文件夹路径(目标文件夹路径)
spa
终端进入到platforms文件夹下,运行 ./copylib.sh libqxcb.so
这时会获得lib文件夹——libqxcb.so的库文件夹,该文件夹中包括程序运行时所须要的QT库.net
将libqxcb.so的库文件夹中的全部文件复制coinflip文件夹中,而后删除掉Giptables/platforms/lib文件夹, 输入:
sudo cp -rf libqxcb.so的库文件夹/*(源文件路径) coinflip文件夹路径(目标文件夹路径)
code
touch CoinFlip.sh
(特别注意:这里的文件夹名称,是程序名称)chmod 777 CoinFlip.sh
vim CoinFlip.sh
,进入到该文件中,按下键盘上的 i 键#!/bin/sh appname=`basename $0 | sed s,\.sh$,,` dirname=`dirname $0` tmp="${dirname#?}" if [ "${dirname%$tmp}" != "/" ]; then dirname=$PWD/$dirname fi LD_LIBRARY_PATH=$dirname export LD_LIBRARY_PATH $dirname/$appname "$@"
./coinflip.sh
而不是./coinflip,即运行程序的sh脚本,而不是二进制文件特此声明:本文是参考:打包程序。