[Linux服务器] Linux Qt程序打包

1133 0
Honkers 2025-3-8 11:04:07 | 显示全部楼层 |阅读模式

前言

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

基本步骤

  1. 依赖库的打包,可以在写成pack.sh文件,把Program程序复制到bin路径,然后把依赖库复制到当前路径下。还需要打包qt的plugins里的platforms库放在bin路径下,最后还需把libqxcb.so的依赖库一起打包。
  1. #!/bin/bash
  2. #exe="Program"
  3. #des=$(pwd)
  4. #deplist=$(ldd $exe |awk '{if (match($3,"/")){printf("%s "),$3}}')
  5. #cp $deplist ${des}
  6. copylib(){
  7. if [ $# -ne 2 ]
  8. then
  9. echo "Usange: $0 target destination"
  10. exit 1
  11. fi
  12. Target=$1
  13. Des=$2
  14. echo "Target:$Target"
  15. echo "Des:$Des"
  16. lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
  17. for Variable in ${lib_array[@]}
  18. do
  19. cp "$Variable" $Des
  20. done
  21. }
  22. #copy program depens
  23. exe="Program"
  24. des=$PWD
  25. copylib $exe $des
  26. #copy qt platforms
  27. cp -r /usr/local/qt/5.15.2/gcc_64/plugins/platforms/ ./
  28. #copy xcb depens
  29. cd platforms
  30. exe=libqxcb.so
  31. copylib $exe $des
复制代码
  1. 整体打包,可以写成sh文件,对相关配置文件,依赖库统一打包,并生成zip文件
  1. inputCmd=$1
  2. rootDir=$(pwd)
  3. echo "${rootDir}"
  4. pkgName=$(date +%Y%m%d_%H%M%S)
  5. echo $pkgName
  6. build_debug_package(){
  7. # create package dir
  8. bindir="package/debug/bin"
  9. configdir="package/debug/config"
  10. mkdir -p $bindir
  11. mkdir -p $configdir
  12. cp ./package/pack.sh ./$bindir
  13. cp ./package/Program.sh ./$bindir/../
  14. cp ./readme.txt ./$bindir/../
  15. cp ./bin_debug/Program ./$bindir
  16. cp -r ./config $configdir/../
  17. cd $bindir
  18. echo "#-1: start collect all the libriares"
  19. chmod 777 pack.sh
  20. ./pack.sh
  21. cd ../ #package dir
  22. tar zcvf LAT_debug_${pkgName}.tar.gz bin config Program.sh readme.txt
复制代码
  1. 编写启动脚本如Program.sh,设置环境变量等,如把依赖库的路径改为当前路径下的库
  1. #!/bin/bash
  2. cd bin
  3. appname=`basename $0 | sed s,\.sh$,,`
  4. dirname=`dirname $0`
  5. PATH=$PATH:$PWD
  6. echo "PATH=$PATH"
  7. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
  8. echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
  9. export PATH
  10. export LD_LIBRARY_PATH
  11. #export QT_DEBUG_PLUGINS=1
  12. #echo $(ldd LocalizerTool)
  13. $dirname/$appname "$@"
  14. #QT_QPA_PLATFORM=offscreen $dirname/$appname "$@"
复制代码
  1. 小结
    可以通过3个脚本文件进行打包和运行
    –makepackage.sh
    –packdep.sh
    –program.sh

拓展

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

  1. 使用docker-compose启动nginx镜像, yml文件如下:
  1. version: "2.0"
  2. services:
  3. nginx-ftp:
  4. image: nginx:latest
  5. restart: always
  6. ports:
  7. - "80:80"
  8. volumes:
  9. - /home/user/docker_work/nginx/nginx.conf:/etc/nginx/nginx.conf
  10. - /home/user/docker_work/build_files:/home/build_files
复制代码
  1. 配置conf文件
  1. user root;
  2. worker_processes auto;
  3. events {
  4. worker_connections 1024;
  5. }
  6. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. server {
  10. listen 80;
  11. location / {
  12. autoindex on;
  13. root /home/build_files;
  14. }
  15. }
  16. }
复制代码
  1. 把打包的库放在本地对应的路径下,启动nginx后即可通过web进行访问下载
    docker-compose up
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行