如何打包一个QT程序(Windows和linux)
sinye56 2024-11-17 01:29 67 浏览 0 评论
如何打包一个QT程序
Windows系统下
通过windeployqt工具
1.以release模式运行程序
2.将release文件夹中的可执行文件复制到一个路径下,推荐桌面
3.在桌面新建一个文件夹,并将刚刚的可执行文件放进去
4.运行windeployqt.exe程序
5.进入到刚刚新建的文件夹路径中
6.执行命令windeployqt test.exe,其中test为可执行文件的文件名
7.等待执行完毕后,可以发现文件夹中多了运行程序所需要的dll
8.该文件夹打包,可以在其他电脑下运行
Linux系统下
通过linuxdeployqt工具
1.以release模式运行
同Windows一样以release模式运行QT程序,以生成可执行文件,即可以直接双击打开的文件,也可以通过右键属性来查看
shared library文件
executable文件
注意图标也是不一样的,如果是executable文件,则不需要下面一步的操作
2.针对release模式下编译出的文件是shared library文件,进行如下操作
在.pro文件中添加如下代码
TEMPLATE = app #这生成一个exe
QMAKE_LFLAGS += -no-pies
添加好后记得执行qmake
3.新建一个文件夹,并将生成的可执行文件复制进去
这里文件夹的名字可以与可执行文件名字相同,方便辨认,我这里不做演示。
4.安装linuxdeployqt
针对Qt,linuxdeployqt这个工具可以帮助我们快速打包Qt项目。在windows下对应的软件叫windowsdeployqt。
linuxdeployqt的github网址:
https://github.com/probonopd/linuxdeployqt/releases
github上提供了两种安装linuxdeployqt的方法,分别是直接下载编译好的安装包安装,或者从源代码安装。两种方式都不难。 但是由于linuxdeployqt还没有发布Ubuntu18.04相应的版本,因此,Ubuntu18.04的用户最好是编译源代码安装,不然在用linuxdeployqt打包Qt项目的时候会报类似于操作系统版本过高的错误。
4.1下载linuxdeployqt可执行程序,上图第一项
- 建议下载后修改文件名,将文件名修改为 linuxdeployqt。
- 修改linuxdeployqt的权限,可以使用以下命令:
sudo chmod a+x linuxdeployqt
- 然后可以考虑将该文件拷贝到目录 /usr/local/bin/ 下,方便之后直接使用命令 linuxdeployqt。拷贝命令如下:
sudo cp linuxdeployqt /usr/local/bin/
4.2编译源代码安装linuxdeployqt
针对操作系统是Ubuntu18.04及以上,目前需要通过源代码编译安装linuxdeployqt,否则执行linuxdeployqt会出现一些报错信息:如主机系统过高等。
- 编译源代码安装的参考网址:参考网址
https://github.com/probonopd/linuxdeployqt/blob/master/BUILDING.md
- 我们默认已经安装好了g++、git等工具,如果没有的话得先安装。
- 还需要安装 patchelf 工具。
示例命令如下:
sudo apt-get -y install git g++ libgl1-mesa-dev
git clone https://github.com/probonopd/linuxdeployqt.git
sudo apt install patchelf
依次执行上面命令,即可
- 进入linuxdeployqt文件夹,命令如下:
cd linuxdeployqt
- 修改 tools/linuxdeployqt/main.cpp 源代码,注释掉源码中版本判断的语句,可以通过指令 gedit tools/linuxdeployqt/main.cpp 来修改源码:
gedit tools/linuxdeployqt/main.cpp
需要注释的代码如下:
// openSUSE Leap 15.0 uses glibc 2.26 and is used on OBS
/*if (strverscmp (glcv, "2.27") >= 0) {
qInfo() << "ERROR: The host system is too new.";
qInfo() << "Please run on a system with a glibc version no newer than what comes with the oldest";
qInfo() << "currently still-supported mainstream distribution (xenial), which is glibc 2.23.";
qInfo() << "This is so that the resulting bundle will work on most still-supported Linux distributions.";
qInfo() << "For more information, please see";
qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
return 1;
}*/
- 当前目录中有一个 CMAKELIST 文件,执行cmake命令:
cmake CMakeLists.txt
- 执行make命令编译源代码:
make
- 编译完成后,在目录 tools/linuxdeployqt/linuxdeployqt 下会生成一个可执行文件 linuxdeployqt,修改其权限:
cd ./tools/linuxdeployqt
sudo chmod a+x linuxdeployqt
- 为了方便之后使用,可以将该可执行文件复制到 /usr/local/bin 目录下:
sudo cp linuxdeployqt /usr/local/bin/
- linuxdeployqt命令可能要用到选项 -appImage(实际上我就用到了),因此需要安装一下 appimagetool,下载和安装命令如下:
sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool
sudo chmod a+x /usr/local/bin/appimagetool
5.添加环境变量
这时候如果执行qmake -v命令操作的话,说明没有找到路径,需要添加环境变量。
终端输入gedit ~/.bashrc命令,修改 .bashrc 文件,在文件末尾追加以下内容,其中/opt/Qt5.9.9/5.9.9是我的Qt安装路径,大家要用自己的路径代替:
#add QT ENV
export PATH=/opt/Qt5.9.9/5.9.9/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/opt/Qt5.9.9/5.9.9/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/opt/Qt5.9.9/5.9.9/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/opt/Qt5.9.9/5.9.9/gcc_64/qml:$QML2_IMPORT_PATH
经测试只添加第一行命令也是可以的
双引号可以加也可以不加
最后要source一下使 ~/.bashrc 这个shell文件立即生效,而不必注销并重新登录。
$ source ~/.bashrc
然后执行qmake -v
6.使用方法
- 命令
linuxdeployqt ~/path/to/project/application -appimage
示例:进入到之前用于存放可执行文件的新建文件夹中
cd /home/li/Desktop.qttest
linuxdeployqt untitled -appimage
其中untitled为可执行文件,执行完就可以自动打包程序了。
AppRun相当于一个快捷方式。
在执行这条命令时可能会报如下错误:
Categories entry not found in desktop file
.desktop file is missing a Categories= key
12
说的是在.desktop文件中少了一个属性Categories,所以我们需要在desktop文件中手动加入一行:
Categories=Application;
7.在ubuntu 中添加qt 应用程序图标
修改qt 目录下的desktop 文件。可以按照ubuntu 官方提示修改。 ubuntu desktop文件使用
https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles
#-- 全局安装(所有用户可用),将xxx.desktop 复制到/usr/share/applications
#-- 当前用户可用, 将xxx.desktop 复制到 ~/.local/share/applications 目录即可
#--appName.desktop
[Desktop Entry]
Version=1.0 #app的版本
Name=myQtApp #app的名字
Comment= this app use for xxx #说明信息
Exec=/path/to/your/QtApp/myQtApp #app的执行路径,绝对路径
Icon=/path/to/your/app_icon/myQtApp.png #icon 路径,绝对路径
Terminal=false #是否在终端启动,效果自己试一下就知道了
Type=Application
Categories=Utility;Application;
脚本
1.新建文件
在新建的文件夹中新建两个文件
- pack.sh
- untitled.sh 该文件的文件名必须与可执行文件的文件名一样
2.添加脚本
- 向pack.sh文件里添加以下内容:
#!/bin/sh
exe="untitled" #你需要发布的程序名称
des="/home/li/Desktop/qttest2" #创建文件夹的位置
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
- 然后向untitled.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 "$@"
3.执行脚本
通过终端进入文件夹目录,运行:
sudo ./pack.sh
会出现命令未找到的错误信息,可执行以下命令,使用文件为可执行文件
chmod a+x pack.sh
然后重新执行sudo ./pack.sh命令即可。
接着可执行文件的依赖的链接库都会拷贝到所在的目录。
最后
但是要注意的一点,最好使用非 Linux FHS (文件系统层次结构标准)
就是创建文件夹的时候,结构如下
.
├── build
├── CI
│ ├── build.sh
│ ├── exe
├── include
│ ├── bchartdir.h
├── lib
│ ├── libchartdir.so
│ ├── libchartdir.so.6.0
│ └── libchartdir.so.6.0.0
├── src
│ ├── ubuntuapp.pro
│ ├── main.cpp
│ ├── mainwindow.cpp
│ ├── mainwindow.h
└── tool
└── deployqt
build.sh里的内容如下
# /bin/bash
cd /home/wu/workspace/ubuntuapp/CI/exe
cp /home/wu/workspace/ubuntuapp/tool/deployqt ./
cd /home/wu/workspace/ubuntuapp/src
/home/wu/Qt5.10.1/5.10.1/gcc_64/bin/qmake /home/wu/workspace/ubuntuapp/src/ubuntuapp.pro -o /home/wu/workspace/ubuntuapp/build -spec linux-g++ CONFIG+=debug
make clean -C /home/wu/workspace/ubuntuapp/build
make -C /home/wu/workspace/ubuntuapp/build
cd /home/wu/workspace/ubuntuapp/CI/exe
cp /home/wu/workspace/ubuntuapp/build/UbuntuApp ./
./deployqt UbuntuApp -qmake="/home/wu/Qt5.10.1/5.10.1/gcc_64/bin/qmake"
rm deployqt
写完后,添加权限
sudo chmod 777 build.sh
ubuntuapp.pro里的内容如下
QT += core gui
TARGET = UbuntuApp
TEMPLATE = app
CONFIG += C++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
INCLUDEPATH += ../include
LIBS += -L../lib -lchartdir
unix:MOC_DIR = ../build/moc
unix:OBJECTS_DIR = ../build/obj
这样,执行完 build.sh 后,就能在 exe 文件夹里得到 一些文件和文件夹
里面的 AppRun 的超链接可以双击后 打开 UbuntuApp 程序
然后,把 exe 文件夹改个名字,压缩成 zip 格式,就可以拷贝到其他机器上用了
1.关于qt.conf
这个文件指定了qt 程序的运行环境,即我们可以使用qt.conf 指定qt程序的运行路径和库路径。内容如下所示:
# Generated by linuxdeployqt
# https://github.com/probonopd/linuxdeployqt/
[Paths]
Prefix = ./ #程序的运行路径
Libraries = ./lib #程序的库路径
Plugins = plugins #插件路径
Imports = qml
Qml2Imports = qml
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)