linux下使用qt静态编译及打包程序完整教程(亲测可用)

概述

        linux上qt程序开发好后会遇到一个问题,就是如何将开发好的程序打包成便于安装的安装包,然后发布给客户使用。这个过程总体可以分为两个步骤:编译和打包。经过测试,成功解决了这个问题,我将整个过程总结如下,既可以方便自己将来重复再花时间搭环境,也可以分享给有需要的人。
        然而在此之前,我们先要解决一个qt程序的编译环境的问题。包含安装系统和安装qt

安装系统

       首先我在vmware虚拟机上安装了一个ubuntu系统,系统版本是ubuntu16.04.6,不知道为什么我在ubuntu20.04上编译qt会出现各种错误,反正用16.04.6版本是没问题的。
       链接:https://pan.baidu.com/s/1J-MDlVbEZw6nE2CrtNDACg 提取码:4ads

安装qt

       然后我们需要安装qt。这时候有两种方法安装,使用两个虚拟机ubuntu分别用两种方法安装qt,一个用来开发并调试程序,一个用来最终编译生成要发布的程序,两种方法如下:
       第一种方法是使用后缀为.run的安装文件直接安装,但是这样安装后的qt编译程序只能进行动态编译,即生成的可执行文件想要运行起来需要运行环境中有其所需要的动态库。我们总不能要求用户在使用我们的程序的时候还要自己安装动态库吧,因此我们在打包发布的时候就得把动态库都打包进安装包,这样的话,安装包就会非常大,一个简单的串口程序都有可能打包成好几十兆的安装包,如果不介意安装包比较大的话可以使用这种方法,安装步骤也非常简单,把所有选项勾选上,一直点下一步就行。这一个qt安装方法也有一个好处,那就是编译qt程序比较快,这样就方便我们在开发过程中进行调试。
       第二种方法是使用qt的源码进行安装,配置安装qt的时候设置使用静态库,这样我们编译我们的qt程序的时候就可以静态编译了,打包成安装包的时候也不需要包含动态库了,安装包会比较小。
       使用qt的源码安装的步骤如下:
1.下载qt源码包
       qt5.9.2的源码包:
       链接:https://pan.baidu.com/s/1W1hFWZCQSzGnR98ebbs49w 提取码:u65g
       tar -xJvf qt-everywhere-opensource-src-5.9.2.tar.xz

2.更新相关软件
       sudo apt-get install build-essential libgl1-mesa-dev libfreetype6-dev -y
       sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype
       sudo apt-get install libfontconfig1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libpulse-dev -y
3.配置编译选项(一定要等上一步执行完再执行这一步,否则会配置失败,如果配置失败,重新解压,重新配置)
3.1 新建目录/home/maoypeng/qtstatic
3.2
32位:
./configure -prefix /home/maoypeng/qtstatic -confirm-license -opensource -c++std c++11 -platform linux-g++-32 -release -static -qt-sqlite -fontconfig -gstreamer 1.0 -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon-x11
3.3
64位:
./configure -prefix /home/maoypeng/qtstatic -confirm-license -opensource -c++std c++11 -platform linux-g++-64 -release -static -qt-sqlite -fontconfig -gstreamer 1.0 -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon-x11

4.编译并安装
make
make install

5.查看qt的qmake版本
5.1 配置环境变量
修改/home/你的名字/.profile文件,这是个隐藏文件(ls -a就会显示出来),在文末加入
QTDIR=/home/maoypeng/qtstatic
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH

5.2 更新修改
source /home/maoypeng/.profile
5.3 重启电脑后查看版本
qmake -v

编译qt程序

1.拷入已经用第一种方法动态编译好的qt工程
2.生成makefile文件, qmake test.pro
3.生成可执行文件, make
       至此,静态编译完成,如果不需要打包成安装包的话,静态编译生成的可执行文件已经可以在相同CPU架构的其他机器上运行了。

打包成安装包

不同的linux发行版默认支持的安装包是不同的,所以打包方法也是不同的,我是用的系统是Ubuntu16.04 32位

1.安装linuxdeployqt

该工具的帮助文档:https://github.com/probonopd/linuxdeployqt/blob/master/README.md
有兴趣,可以自己看看。

下载linuxdeployqt

由于我使用的系统是32位的,因此不能使用https://github.com/probonopd/linuxdeployqt/releases中的64位可执行文件,因此需要直接下载源码来编译,当然,这种方法在64位的Ubuntu16.04上同样适用。由于从github下载较慢,因此我把源码保存到了百度网盘中方便下载。
链接:https://pan.baidu.com/s/1QJeANlAGFGRlUscMTan0wg
提取码:6z9q

编译linuxdeployqt

使用已经搭建好的静态编译环境来编译

$ tar -xzvf linuxdeployqt-7.tar 
$ cd linuxdeployqt-7
$ qmake linuxdeployqt.pro
$ make

安装linuxdeployqt

将编译生成的可执行文件复制到/usr/local/bin目录,这样,我们就可以在其他目录访问了

$ cd bin
$ sudo cp linuxdeployqt /usr/local/bin

测试是否安装成功

$ linuxdeployqt --version

输出版本信息,表示安装成功。
在这里插入图片描述

2.安装patchelf

sudo apt-get intall patchelf

3.安装appimagetool

64位:

$ 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

32位:

$ sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-i686.AppImage" -O /usr/local/bin/appimagetool
$ sudo chmod a+x /usr/local/bin/appimagetool

注:i686属于i386体系

4. Qt动态库路径设置到环境变量

如果程序是静态编译的,直接跳过该步骤。
工具会根据生成的可执行文件,自动搜索依赖,故我们需要确保Qt库的相关路径设置到环境变量中,这样工具在搜索时才能找到,并拷贝它们。
另外拷贝文件,对环境变量的使用,不想要重启系统那么麻烦,所以我们修改.bashrc文件,仅对当前用户永久有效。

$ vim ~/.bashrc

在.bashrc文件末尾,追加内容如下:

export PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/bin:$PATH
export LIB_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/lib:$LIB_PATH
export PLUGIN_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/plugins:$PLUGIN_PATH
export QML2_PATH=/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/qml:$QML2_PATH

其中,/home/maoypeng/Applications/Qt5.1.1/5.1.1/gcc/是本次测试环境Qt安装目录,大家根据自己的情况替换。
然后,使用source命令让文件立即生效。

$ source ~/.bashrc

然后,对环境变量测试下,是否设置正确。如下:

$ qmake -v

5. 拷贝依赖文件

拷贝前,确认生成的是Release版本的程序,这个是常识。
我们在根目录下建立COMTransmit_setup目录,用于放置打包相关的文件;
并在COMTransmit_setup下继续建个COMTransmit目录,用来装COMTransmit应用及拷贝文件。

$ mkdir COMTransmit_setup
$ cd COMTransmit_setup
$ mkdir COMTransmit

把我们的应用COMTransmit拷贝到COMTransmit目录下
在这里插入图片描述
使用命令执行依赖文件拷贝

$ linuxdeployqt COMTransmit -appimage

在这里插入图片描述
终端报错,如下:
在这里插入图片描述
不用管它,是关于桌面文件的,后面我们直接编辑它。
一会后,/COMTransmit_setup/COMTransmit目录下,已经把依赖全部拷贝好了。
在这里插入图片描述
未完待续。。。

  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Linux系统下,有两种常用的方法可以打包QT程序。 第一种方法是通过脚本进行打包。这种方法简单方便,但是打包程序不能在其他干净的Linux系统中运行。你可以参考中提到的方法,编写一个脚本文件来进行打包。具体步骤如下: 1. 首先,确保你已经安装了所需的依赖库。你可以使用ldd命令来查找程序所需的共享库。 2. 创建一个脚本文件,可以使用任何你熟悉的文本编辑器。在脚本文件中,你需要指定程序的入口点以及程序所需的共享库路径。 3. 接下来,使用chmod命令给脚本文件添加可执行权限。 4. 最后,运行脚本文件来进行打包打包完成后,你会得到一个包含可执行文件和所需共享库的目录。 但需要注意的是,通过这种方式打包QT程序不能在其他干净的Linux系统中运行,所以不太推荐使用。 第二种方法是使用linuxdeployqt工具进行打包。这个工具可以方便地将QT程序打包成一个独立的可执行文件,可以在任何Linux环境中直接运行。你可以从中提供的链接下载linuxdeployqt使用linuxdeployqt进行打包的步骤如下: 1. 首先,下载并解压linuxdeployqt工具。 2. 将你的QT程序复制到linuxdeployqt的目录中。 3. 打开终端,并切换到linuxdeployqt的目录。 4. 运行以下命令来打包程序: ``` ./linuxdeployqt <path_to_your_qt_program> -appimage ``` 其中,`<path_to_your_qt_program>`是你的QT程序的路径。 5. 打包完成后,你将得到一个AppImage文件,这个文件就是你的打包好的程序。 通过使用linuxdeployqt工具进行打包,你可以得到一个可以在任何Linux环境中直接运行的QT程序。这种方法更加方便和可靠,推荐使用。 参考文献: 目前我接触到的Linux下的QT程序打包方法主要有两种:第一种:通过脚本进行打包,这种方法简单方便,但是通过这种方式打包QT程序,并不能放到另一台干净的Linux系统下运行,所以不太推荐;第二种:通过Linuxdeployqt进行打包,通过这种方法打包QT程序也很方便,而且打包程序可以放到任何Linux环境下直接运行。下面我将详细介绍以下两种打包方式,大家可以根据自己的实际使用情况任意选择打包方式。 1.下载linuxdeployqt:https://github.com/probonopd/linuxdeployqt/releases

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值