东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3531|回复: 1

[C/C++] qt的客户端软件打包为deb安装到另外一台ubuntu20.04系统

[复制链接]

1366

主题

1857

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14466
QQ
发表于 2023-5-10 17:20:26 | 显示全部楼层 |阅读模式


qt的客户端软件打包为deb安装到另外一台ubuntu20.04系统


参考:https://blog.csdn.net/qq_35605018/article/details/107808787


  1. #!/bin/sh
  2. appname=`basename $0 | sed s,\.sh$,,`
  3. dirname=`dirname $0`
  4. tmp="${dirname#?}"
  5. if [ "${dirname%$tmp}" != "/" ]; then
  6. dirname=$PWD/$dirname
  7. fi

  8. LD_LIBRARY_PATH=$dirname
  9. export LD_LIBRARY_PATH
  10. $dirname/$appname "$@"
复制代码




  1. #!/bin/sh

  2. if [ ! -d "./dep" ]; then
  3.   mkdir ./dep
  4. else : then
  5.   rm -rf ./dep
  6.   mkdir ./dep
  7. fi

  8. ldd ./deb_fabu |cut -d ">" -f 2|grep lib|cut -d "(" -f 1|xargs tar -chvf ./dep/deb_fabu.tar
  9. echo "ok"
复制代码



  1. package: fabu
  2. version: 0.0.1                        
  3. architecture: amd64                     
  4. maintainer: jiangjinju
  5. description: jiangjinju deb fabu demo
复制代码


  1. [Desktop Entry]
  2. Encoding=UTF-8
  3. Name=fabu  
  4. Exec=/usr/local/deb_fabu/deb_fabu.sh
  5. Icon=/usr/share/icons/jiang.png
  6. Comment="released_on_2023_05_10"
  7. Terminal=false
  8. Type=Application
  9. Categories=Development
复制代码




报错解决,最终成功的:
dayao@dayao-Default-string:/usr/local/dayaovhf$ ./dayaovhf
./dayaovhf: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by ./dayaovhf)


这是没有找到对的库文件so


dayao@dayao-Default-string:/usr/local/dayaovhf$ ./dayaovhf
./dayaovhf: symbol lookup error: /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: undefined symbol: _ZN22QWindowSystemInterface24setPlatformFiltersEventsEb, version Qt_5_PRIVATE_API


这是没有找到对的库文件so


dayao@dayao-Default-string:/usr/local/dayaovhf$ ./dayaovhf
Cannot mix incompatible Qt library (5.12.8) with this library (5.15.2)
已放弃


混合了 版本冲突 找到了对应的库文件 但是内部版本不一致导致  也就是说所有的库文件都要是同一个版本的才行
我把开发qt的安装目录下的所有so打包:/home/jiang/jjj_qt_works/QT5.15.2_jjj/5.15.2/gcc_64/lib
拷贝到另外一台待部署的电脑 并设置环境变量
export LD_LIBRARY_PATH=/home/dayao/jiang_works/qt5.15.2_libs/libLD_LIBRARY_PATH   就是这个哦(另外一台机器)


发现:以上所有问题解决,原则上不需要这么多so,可以通过初步删除的方式减少


dayao@dayao-Default-string:/usr/local/dayaovhf$ ./dayaovhf
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.


已放弃    libqxcb.so
解决:需要把platforms/libqxcb.so复制到可执行文件同级(deb打包的)
而这个文件libqxcb.so的来源(qt的安装目录、版本一致):
/home/jiang/jjj_qt_works/QT5.15.2_jjj/5.15.2/gcc_64/plugins/platforms/libqxcb.so




dpkg -b project/ dayaovhf_0.0.4_amd64.deb


sudo dpkg -i dayaovhf_0.0.4_amd64.deb


sudo dpkg -P dayaovhf


部署后的调用顺序:dayaovhf.desktop---> dayaovhf.sh  ----> dayaovhf


因为这个 *.sh文件里面可以设置 export LD_LIBRARY_PATH   所以终端.bashrc中就不需要设置LD_LIBRARY_PATH了




整个成功的项目打包文件:project_success.zip放附件






qt02.png
qt01.png
dayaovhf_0.0.4_amd64.deb.png

demo.zip

19.4 KB, 阅读权限: 188, 下载次数: 0

deb_fabu_qt.zip

4.38 KB, 阅读权限: 188, 下载次数: 0

project_success.zip

308.69 KB, 阅读权限: 188, 下载次数: 0

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1366

主题

1857

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14466
QQ
 楼主| 发表于 2023-5-10 18:05:57 | 显示全部楼层
__cxa_throw_bad_array_new_length, version QT_5  这个报错怎么解决?  网上都说是缺少了 libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6      ldd 可执行文件查看的

或者是 冲突 引起?   具体还不清楚  下次遇到再说
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-7-22 15:17 , Processed in 0.218383 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表