C++学习笔记(十二) - Qt静态编译及程序静态发布

开发环境系统版本:Ubuntu 16.04 LTS
程序测试环境系统版本Ubuntu 16.04 LTS & Ubuntu Server 16.04
Qt版本QT5.8.0
前言:前面写了一篇Qt5动态发布的方法,可是测试中发现使用起来还是很复杂,我的程序涉及到数据库,websocket,tcp等,组件太多,程序虽然能正常运行,但是数据库无法连接,必须要安装Qt5和MySQL的驱动才可以。所以继续研究qt的静态发布。
qt静态发布网上有众多教程,官网也有一个教程linux-deployment,巴特,没一个现在还能用的。官网的教程不能使用我认为还是有原因的,我搞到最后才发现,这可能就是企业版和开源免费版的区别。
下面进入正题,我分享一下我这一个星期摸索的成果。目前实现了静态发布之后的程序,在相同版本Linux和server上能够直接运行,不需要安装任何东西。

1 静态编译Qt

首先需要下载qt的源码:qt-everywhere-opensource-src-5.8.0.tar.gz,解压在某个目录下。
然后从Terminal进入该文件夹。
输入指令:

./configure --help

会看到一堆帮助文档,可以对着帮助文档把自己不需要的部分删掉,删除的方法就是后面的,不编译或者跳过。编译的东西越多越容易报错,不同版本的帮助文档也不相同。
然后输入以下指令:

sudo ./configure -prefix /home/qking/Documents/Qt5.8.static -continue -opensource -confirm-license -static  -no-opengl -sql-mysql -no-compile-examples -no-dbus -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland

只解释几个重要的:

  • -prefix /home/qking/Documents/Qt5.8.static 是指定静态库安装目录
  • -continue 有错误也尽量继续编译
  • -static 静态编译
  • -no-opengl 不要opengl
  • -skip 跳过后面的模块
    反正,哪里有问题,你就看自己会不会用到,用不到就到帮助文档里找以下怎么跳过。
    下一步就是执行:
sudo make

过了很久之后,没有error,就执行make install

静态编译qt会很艰难,有什么问题互相交流吧。
marke一个环境变量的配置,不晓得是不是必需的,如果后面的步骤出现什么问题,可以试一下。

QTDIR= /home/qking/Documents/Qt5.8.static
PATH=$QTDIR/bin:$PATH     
MANPATH=$QTDIR/global:$MANPATH     
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH     
export QTDIR PATH MANPATH LD_LIBRARY_PATH  

2 静态编译程序

上面完成之后就可以静态编译程序了,首先设置qt creator,引入我们的静态库。

2.1 添加静态库

点击tool-options-Build&Run,然后选择Qt Versions选项卡:

C++学习笔记(十二) - Qt静态编译及程序静态发布_第1张图片
Qt Versions

点击add,到静态库的哪个安装目录下,找到bin/qmake,添加进来:

C++学习笔记(十二) - Qt静态编译及程序静态发布_第2张图片
参考我的路径

复制下面的Versionname后面的内容。
选择Kits选项卡,点击add:

C++学习笔记(十二) - Qt静态编译及程序静态发布_第3张图片
Kits

name那一栏粘贴刚才复制的名字,检查一下Qt Version是不是静态库的,然后点击旁边的Make Default设置为默认。

2.2 静态编译程序

首先打开自己的工程目录,删掉后缀为.pro.user.pro.user.677b2d5的两个文件,第二个可能是相似。然后重新使用qt打开工程,它就会提示你重新选择编译所用的kits,选择静态的就好了。
然后编译程序,编译出的就是静态的程序,只将可执行文件拷出来就可以在其他电脑上执行。文件大小在M以上,动态的一般只有几百K。

参考文献
Qt 官网
Linux 下 静态编译Qt程序
拜谢各位大神,希望大家多多交流。

你可能感兴趣的:(C++学习笔记(十二) - Qt静态编译及程序静态发布)