赞
踩
linux上qt程序开发好后会遇到一个问题,就是如何将开发好的程序打包成便于安装的安装包,然后发布给客户使用。这个过程总体可以分为两个步骤:编译和打包。经过测试,成功解决了这个问题,我将整个过程总结如下,既可以方便自己将来重复再花时间搭环境,也可以分享给有需要的人。
然而在此之前,我们先要解决一个qt程序的编译环境的问题。包含安装系统和安装qt
首先我在vmware虚拟机上安装了一个ubuntu系统,系统版本是ubuntu16.04.6,不知道为什么我在ubuntu20.04上编译qt会出现各种错误,反正用16.04.6版本是没问题的。
链接:https://pan.baidu.com/s/1J-MDlVbEZw6nE2CrtNDACg 提取码:4ads
然后我们需要安装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
1.拷入已经用第一种方法动态编译好的qt工程
2.生成makefile文件, qmake test.pro
3.生成可执行文件, make
至此,静态编译完成,如果不需要打包成安装包的话,静态编译生成的可执行文件已经可以在相同CPU架构的其他机器上运行了。
不同的linux发行版默认支持的安装包是不同的,所以打包方法也是不同的,我是用的系统是Ubuntu16.04 32位
该工具的帮助文档:https://github.com/probonopd/linuxdeployqt/blob/master/README.md
有兴趣,可以自己看看。
由于我使用的系统是32位的,因此不能使用https://github.com/probonopd/linuxdeployqt/releases中的64位可执行文件,因此需要直接下载源码来编译,当然,这种方法在64位的Ubuntu16.04上同样适用。由于从github下载较慢,因此我把源码保存到了百度网盘中方便下载。
链接:https://pan.baidu.com/s/1QJeANlAGFGRlUscMTan0wg
提取码:6z9q
使用已经搭建好的静态编译环境来编译
$ tar -xzvf linuxdeployqt-7.tar
$ cd linuxdeployqt-7
$ qmake linuxdeployqt.pro
$ make
将编译生成的可执行文件复制到/usr/local/bin目录,这样,我们就可以在其他目录访问了
$ cd bin
$ sudo cp linuxdeployqt /usr/local/bin
测试是否安装成功
$ linuxdeployqt --version
输出版本信息,表示安装成功。
sudo apt-get intall patchelf
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体系
如果程序是静态编译的,直接跳过该步骤。
工具会根据生成的可执行文件,自动搜索依赖,故我们需要确保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
拷贝前,确认生成的是Release版本的程序,这个是常识。
我们在根目录下建立COMTransmit_setup目录,用于放置打包相关的文件;
并在COMTransmit_setup下继续建个COMTransmit目录,用来装COMTransmit应用及拷贝文件。
$ mkdir COMTransmit_setup
$ cd COMTransmit_setup
$ mkdir COMTransmit
把我们的应用COMTransmit拷贝到COMTransmit目录下
使用命令执行依赖文件拷贝
$ linuxdeployqt COMTransmit -appimage
终端报错,如下:
不用管它,是关于桌面文件的,后面我们直接编辑它。
一会后,/COMTransmit_setup/COMTransmit目录下,已经把依赖全部拷贝好了。
未完待续。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。