Linux Qt程序打包

2023-05-16

前言

当我们在linux系统上开发一些工具时,想快速分发给相关人员使用时,我们可以把开发的相关依赖进行打包,然后分发使用,其中打包过程中遇到一些问题,在没有安装Qt的机器上运行回报缺少xcb库,通过ldd查找libqxcb.so的依赖并进行打包即可。还有一个问题就是软连接的问题,一些依赖库都是软链接,cp的时候有时会出现只copy符号,后来不知道什么原因,复制的时候会把软链接对应的实际内容复制过来,问题就迎刃而解了。

基本步骤

  1. 依赖库的打包,可以在写成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
  1. 整体打包,可以写成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
  1. 编写启动脚本如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 "$@"
  1. 小结
    可以通过3个脚本文件进行打包和运行
    –makepackage.sh
    –packdep.sh
    –program.sh

拓展

可以通过docker,使用nginx搭建静态文件服务器,把工具包上传到服务器供其他人使用.

  1. 使用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
  1. 配置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;
        }
    }
}
  1. 把打包的库放在本地对应的路径下,启动nginx后即可通过web进行访问下载
    docker-compose up
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Qt程序打包 的相关文章

随机推荐