linux用于开发qt java_Linux下Qt程序的打包发布
为便于描述,我们这里假设生成的程序名称为test(即要发布的程序名称)
方法一:
1. QtCreate使用Release版本编译
将编译后生成的可执行程序(如:test)复制到一个空目录下
2.使用ldd命令查看和导出需要的库
在步骤1的目录下新建一个pack.sh文件,文件内容如下:
#!/bin/sh
exe="test" #你需要发布的程序名称
des="/home/someone/QtProject/build-test-Desktop-Release/Test" #步骤1中的目录即本文件所在目录
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
文件中有两处中文注释的地方需要修
3.编写执行程序的sh文件
在此目录下再新建一个test.sh文件(文件名必须与可执行文件名字一样),
文件内容如下(不需要修改):
#!/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 "$@"
4.执行程序
赋予test.sh执行权限,
chmod +x test.sh
执行程序
./test.sh
将此目录打包发布即可,注意需要执行程序时是运行test.sh文件,不是release生成的可执行程序
方法二:
打包发布Linux 版Qt应用
1、把编译的应用 主程序(例如 myqtapp) 复制 到 另一简单起名的文件夹,例如 主目录下 ~/myapp
(把应用所需的SQLite等数据库也一同放入,或者放入程序代码指定的位置,例如 /var/opt内的位置,程序使用的普通图片,按代码指定也放入指定位置或 ~/myapp内,例如,我的是放在 ~/myapp/images)
2、程序需要用到的各个插件也从Qt安装目录中复制到主程序目录内
(例如在 /opt/Qt5.8.0/5.8/gcc_64/plugins ,我用到 platforms 、 sqldrivers 和 imageformats,其中 platforms我只用到 libqxcb.so,则platforms夹内需libqxcb.so一个文件即可,sqldrivers是SQLite,Mysql驱动,imageformats是图片调用需要)
3、复制必须的 库文件 ,先建立 脚本(cplib.sh),
vi ~/myapp/cplib.sh
内容是:
#!/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
终端下执行命令:
cd ~/myapp
chmod +x cplib.sh
./cplib.sh myqtapp
完成后,可以见到在 ~/myapp目录内生成lib目录,内有主程序需用到的多个库文件,从中取出必要的部分,不需要全部文件
建立 ~qtlib文件夹,从 ~/myapp/lib 内复制以下必需库文件:
libicudata.so.56、libicui18n.so.56、libicuuc.so.56、libQt5Core.so.5、libQt5DBus.so.5、libQt5Gui.so.5、libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5、libQt5Widgets.so.5件和文件名中包含xcb的全部文件,例如 libX11-xcb.so.1、libxcb.so.1等
(libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5这些是我的主程序使用,自动找到,如没有对应功能,则没有对应文件)
4.复制 libqxcb.so 需要的库文件
先把 cplib.sh 复制 一份 ,放入 ~/myapp/platforms,然后
cd ~/myapp/platforms
./cplib.sh libqxcb.so
完成后, ~/myapp/platforms目录内生成lib目录,内有libqxcb.so需用到的多个库文件,从中取出必要的部分,不需要全部文件,也是复制 到 ~qtlib文件夹
libQt5DBus.so.5、libQt5XcbQpa.so.5、和文件名中包含xcb的全部文件。
5.目标机器安装 qtlib
把 qtlib 文件夹内容 放入 /usr/local/lib/qtlib
sudo权限 在/etc/ld.so.conf.d 下增加文件 usr-libs.conf
内容 是
/usr/local/lib/qtlib
然后 执行 sudo ldconfig
6.最后检查是否缺少 其他库文件,在终端下 运行 主程序
如没有 正常运行,会有出错信息提示,查看其中 的 库文件名 libXXXX.so.XX,在Qt的安装目录 中找文件
例如在:/opt/Qt5.8.0/5.8/gcc_64/lib
要注意的是区分所复制出来的文件不能是链接文件同,要找到真正的库文件,复制 到 /usr/local/lib/qtlib ,并重命名这库文件 在出错信息中显示的正确的文件名
重新执行 sudo ldconfig
重复 这第6步,直到能正常启动主程序,一般情况 下经过前面5步后,正常方式 执行应用(myqtapp)或应用启动器(myqtapp.desktop)后,没有正常显示出画面,才需要这第6步。
7. 最后, ~/myapp文件夹 就是 应用程序包含文件,一般安装放入 /opt/myapp内,有变动的文件安装一般放入/var/opt/myapp内,必需的Qt库文件一般安装放入 /usr/local/lib/qtapp(参照第5步),目标机器上就安装完成,最后,建立桌面启动器(其中 指定了 图标)
vi myqtapp.desktop
内容是
[Desktop Entry]
Version=1.0
Name=myqtapp
GenericName=myqtapp
Comment=myqtapp
Exec=/opt/myapp/myqtapp
Icon=/opt/myapp/images/myapp.ico
Terminal=false
Type=Application
Categories=Application;
StartupNotify=true
X-Desktop-File-Install-Version=0.22
linux用于开发qt java_Linux下Qt程序的打包发布相关推荐
- linux c++开发_Linux/Windows下进行C/C++开发的差异
1. 平台差异简介 Windows 和Unix是当前两大主流操作系统平台,基于C/C++的开发人员经常会面临这两个平台之间的移植的问题.Unix作为一个开发式的系统,其下有出现了很 多个分支,包括Su ...
- [Qt]VS2015下Qt项目的x86和x64版本编译
原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:https://blog.csdn.net/humanking7/article/details/85883828 文章目录 @[toc] ...
- ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)
在CCES环境下将程序烧录到flash主要有两种方式. 1.通过命令窗口 首先在对项目编译产生文件的属性设置为Release. 在编译完成后,找到每个CORE单独生成的DXE文件: 文件通常位于项目目 ...
- Android 应用开发(33)---Android程序签名打包
Android程序签名打包 第一章的倒数第二节,本节给大家介绍的是如何将我们的程序打包成Apk文件,并且为我们的Apk签名! 上一节中已经说了,我们后续的教程使用的IDE是Android Studio ...
- Mac环境下Android一键自动打包发布到蒲公英平台
由于项目提测需要编译出apk然后发布到蒲公英平台供测试人员下载,在之前是需要手动编译出apk文件然后打开蒲公英网站再手动上传发布到平台,这样如果要上传几个不同的版本和渠道包就比较麻烦,于是,一个能一键 ...
- Web应用程序的打包发布与优化项目的URL
前言 我们完成一个Web文件之后就得对这个应用程序进行打包或者发布了,今天就来梳理一下打包或者发布Web文件的时候应该如何进行操作. 目录 前言 Java Web的打包与发布 优化URL 结语 Jav ...
- Java使用IntelliJ IDEA创建一个基于Swing的GUI图形化程序,打包发布为jar
1.创建GUI窗体 首先,直接新建一个默认的空的Java模块即可,随便取个名字 之后再src目录下右键,新建,创建一个Swing的GUI窗体,随便取个名字 给主窗体改个名字 到java代码中生成一个窗 ...
- linux 写java_linux下java程序开发
在linux终端下敲击:java(用于java程序的执行) 如果有一大串的字符输出说明已经安装好了.(linux程序默认是安装java的,但是javac好像不是默认) 敲击:javac(用于程序的编译 ...
- QT基础入门【调试篇】QT程序如何打包发布生成可执行exe文件(win下的可执行程序)
最新文章
- 超越SimCSE两个多点,Prompt+对比学习的文本表示新SOTA
- 变压器绕组降低邻近效应_高功率UPS性能提升,规格/重量显著降低
- linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
- 如何将kux格式的视频转换成我们常用的MP4格式
- 田志刚:个人知识管理常用软件、工具介绍
- mysql数据一条复制_Mysql 复制一条数据
- android svg 线条动画教程,简单的SVG线条动画
- WPTools改进了光标定位算法和RTF编写器
- 关于vue-lic脚手架使用less和sass的配置
- jmeter调试取样器
- 计算机考研数据结构考试大纲,2017考研大纲:计算机考研大纲文字版之数据结构...
- [附源码]Python计算机毕业设计SSM基于JAVA宠物店管理系统(程序+LW)
- 一些十分有用的字符串相关的函数,在写串口解析,TCP HTTP通信时有用
- 【ftp】ftp服务器无法登录的解决办法
- 虚拟局域网软件开源_软件定义汽车 (第十集):决战架构之巅
- 处理器有k和无k有什么区别?
- 基于qstock的量化复盘与自动盯盘
- Chapter7 对称密钥原语的实用构造
- 幻立方解法之151阶
- 传感器自学笔记第二章——PCF8591 A/D模块
热门文章
- Gridview光棒效果
- eclipse 快捷键总结
- 第二章简答_微观 第二章 效用论
- c++hello world代码_在Rust代码中编写Python是种怎样的体验?
- fastreport文本字数太多换行_Python教程第10篇:聊聊print换行输出和重复多次打印...
- C语言程序设计期末卷子,C语言程序设计试题1
- 华为商城抢手机软件_华为p40配置详细参数
- python书籍pdf文档密码-Python玩转PDF的各种骚操作
- 国潮国粹剪纸风京剧人物PSD素材,让东方韵味更浓
- 设计师如何了解行业方向?推荐设计师交流平台