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

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

作者: Savior2016 | 来源:发表于2017-05-20 10:01 被阅读622次

开发环境系统版本: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选项卡:

Qt Versions

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

参考我的路径

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

Kits

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

2.2 静态编译程序

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

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

相关文章

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

    开发环境系统版本::Ubuntu 16.04 LTS程序测试环境系统版本:Ubuntu 16.04 LTS & U...

  • 静态库与动态库区别

    本文动态库、静态库区别部分转载自C++静态库与动态库 程序的编译过程如上图 静态库: 之所以成为【静态库】,是因为...

  • JIT 和 AOT

    程序主要有两种运行方式:静态编译 与 动态解释 AOT (静态编译) 静态编译的程序在执行前程序会被提前编译为机器...

  • Qt静态编译

    想把项目中的Txt文件分割功能单独分离出来,用静态编译会让分发方便一点。于是开始捣鼓编译安装:https://bl...

  • C与C++混合链接静态库

    本次主要是将C++的静态库链接到一个C的静态库里。编译环境是 mingw。 一、x86环境 1、C++的静态库编译...

  • 关于Qt程序中动态和静态的几点总结

    在Qt程序中,分动态库版本的Qt和静态库版本的Qt。 官方默认提供的二进制包就是动态库版本的Qt,如果自行编译则编...

  • Windows下发布Qt程序

    Windows下发布Qt程序有两种方法: 第一种,静态编译,可生成单一的可执行文件。第二种,动态编译,需同时附上需...

  • Qt5.12.5 静态编译以及裁剪大小对比

    最近在研究用静态编译的 Qt 做个 Qt 的安装包程序,因为 nsis 在界面自定义还有多语言适配等问题上不太理想...

  • Runtime

    一、简介 C++ 是基于静态类型,而 Objective-C 是基于动态运行时类型。用 C++ 编写的程序通过编译...

  • C/C++编程知识:Linux 动态库相关知识整理

    动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/vuguxxtx.html