Linux Qt程序打包
linuxQt程序打包和nginx服务器搭建
·
前言
当我们在linux系统上开发一些工具时,想快速分发给相关人员使用时,我们可以把开发的相关依赖进行打包,然后分发使用,其中打包过程中遇到一些问题,在没有安装Qt的机器上运行回报缺少xcb库,通过ldd查找libqxcb.so的依赖并进行打包即可。还有一个问题就是软连接的问题,一些依赖库都是软链接,cp的时候有时会出现只copy符号,后来不知道什么原因,复制的时候会把软链接对应的实际内容复制过来,问题就迎刃而解了。
基本步骤
- 依赖库的打包,可以在写成pack.sh文件,把Program程序复制到bin路径,然后把依赖库复制到当前路径下。还需要打包qt的plugins里的platforms库放在bin路径下,最后还需把libqxcb.so的依赖库一起打包。
#!/bin/bash
#exe="Program"
#des=$(pwd)
#deplist=$(ldd $exe |awk '{if (match($3,"/")){printf("%s "),$3}}')
#cp $deplist ${des}
copylib(){
if [ $# -ne 2 ]
then
echo "Usange: $0 target destination"
exit 1
fi
Target=$1
Des=$2
echo "Target:$Target"
echo "Des:$Des"
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
for Variable in ${lib_array[@]}
do
cp "$Variable" $Des
done
}
#copy program depens
exe="Program"
des=$PWD
copylib $exe $des
#copy qt platforms
cp -r /usr/local/qt/5.15.2/gcc_64/plugins/platforms/ ./
#copy xcb depens
cd platforms
exe=libqxcb.so
copylib $exe $des
- 整体打包,可以写成sh文件,对相关配置文件,依赖库统一打包,并生成zip文件
inputCmd=$1
rootDir=$(pwd)
echo "${rootDir}"
pkgName=$(date +%Y%m%d_%H%M%S)
echo $pkgName
build_debug_package(){
# create package dir
bindir="package/debug/bin"
configdir="package/debug/config"
mkdir -p $bindir
mkdir -p $configdir
cp ./package/pack.sh ./$bindir
cp ./package/Program.sh ./$bindir/../
cp ./readme.txt ./$bindir/../
cp ./bin_debug/Program ./$bindir
cp -r ./config $configdir/../
cd $bindir
echo "#-1: start collect all the libriares"
chmod 777 pack.sh
./pack.sh
cd ../ #package dir
tar zcvf LAT_debug_${pkgName}.tar.gz bin config Program.sh readme.txt
- 编写启动脚本如Program.sh,设置环境变量等,如把依赖库的路径改为当前路径下的库
#!/bin/bash
cd bin
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
PATH=$PATH:$PWD
echo "PATH=$PATH"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
export PATH
export LD_LIBRARY_PATH
#export QT_DEBUG_PLUGINS=1
#echo $(ldd LocalizerTool)
$dirname/$appname "$@"
#QT_QPA_PLATFORM=offscreen $dirname/$appname "$@"
- 小结
可以通过3个脚本文件进行打包和运行
–makepackage.sh
–packdep.sh
–program.sh
拓展
可以通过docker,使用nginx搭建静态文件服务器,把工具包上传到服务器供其他人使用.
- 使用docker-compose启动nginx镜像, yml文件如下:
version: "2.0"
services:
nginx-ftp:
image: nginx:latest
restart: always
ports:
- "80:80"
volumes:
- /home/user/docker_work/nginx/nginx.conf:/etc/nginx/nginx.conf
- /home/user/docker_work/build_files:/home/build_files
- 配置conf文件
user root;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
location / {
autoindex on;
root /home/build_files;
}
}
}
- 把打包的库放在本地对应的路径下,启动nginx后即可通过web进行访问下载
docker-compose up
更多推荐
已为社区贡献1条内容
所有评论(0)