QT静态编译安装详细教程(亲测可用)

QT静态编译相关知识介绍

    如需要开发一个不带运行库的程序,也就是只有一个单独的exe,不带任何dll。然而qt官方提供的都是动态库,所以需要自己搭环境编译静态库。在此,先解释一下库是什么,动态库是什么,静态库是什么,然后再进行QT静态编译安装流程的介绍。

库是什么

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。

所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:
在这里插入图片描述

静态库是什么

之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。

试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。

静态库特点总结:

l 静态库对函数库的链接是放在编译时期完成的。

l 程序在运行时与函数库再无瓜葛,移植方便。

l 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

Linux下使用ar工具、Windows下vs使用lib.exe,将目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索。一般创建静态库的步骤如图所示:


在这里插入图片描述

动态库是什么

通过上面的介绍发现静态库,容易使用和理解,也达到了代码复用的目的,那为什么还需要动态库呢?为什么还需要动态库?为什么需要动态库,其实也是静态库的特点导致。空间浪费是静态库的一个问题。

在这里插入图片描述

另一个问题是静态库对程序的更新、部署和发布页会带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户(对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新)。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。

在这里插入图片描述

动态库特点总结:

l 动态库把对一些库函数的链接载入推迟到程序运行的时期。

l 可以实现进程之间的资源共享。(因此动态库也称为共享库)

l 将一些程序升级变得简单。

l 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

Window与Linux执行文件格式不同,在创建动态库的时候有一些差异。

l 在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的声明时需要有_declspec(dllexport)关键字。

l Linux下gcc编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。

与创建静态库不同的是,不需要打包工具(ar、lib.exe),直接使用编译器即可创建动态库。

1 静态编译环境开始安装:下载并安装vs2017

(1)下载并安装Visual Studio Professional 2017,下载地址为:

下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux

https://my.visualstudio.com/Downloads?q=Visual%20Studio%202017

(2)勾选“使用C++的桌面开发”并执行安装即可

2 下载并安装cmake

下载地址如下:

Download CMake

其它安装过程就不说了,一直点就行了,只是注意一下下面这个步骤,选择第二个,添加到系统环境变量中

3 下载并安装ninja  

下载地址如下(建议使用谷歌浏览器打开网站):

Releases · ninja-build/ninja · GitHub

 

解压后就是一个exe文件,特地为它加个环境变量有点大可不必了,所以我就直接把它移动到了系统盘路径里面。

4 下载并安装perl

下载地址如下:

Strawberry Perl for Windows

 

5 下载并安装python

下载地址如下:

https://www.python.org/downloads/windows/

6 下载并安装ruby

Ruby下载地址:

https://rubyinstaller.org/downloads/

安装ruby时候,请记得勾选自动添加到环境变量中 

7下载Qt源码

Index of /archive/qt/5.12/5.12.0/single

也可以去清华大学开源软件镜像站下载:

Index of /qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

8 查看下载的安装包是否都安装成功

输入如下命令,查看安装是否成功;

python -V

perl -v

cmake --version

ninja --version

ruby --version

注意:由于上面那些软件将自己的路径加在了系统环境变量,所以想要生效需要电脑重启一下如果安装不成功,请重新安装,路径不用使用中文路径

9 开始编译QT源码

在Windows上,有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。这两个环境不兼容,无法混合。你必须选择一个。

这两者的区别如下:

当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,最好用Qt MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。

(1)解压qt-everywhere-src-5.12.0.zip

(2)修改源码里的qtbase\mkspecs\common\msvc-desktop.conf文件

修改-MD为-MT;其中D的意思是动态编译(dynamic),T的意思是静态编译(static源码:

 改为:

3在应用程序中打开如下,点击进入

进入源码目录,并输入如下命令: 

configure.bat -static -prefix "D:\Qt\qt5.12.0-static" -confirm-license -opensource  -debug-and-release -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp

具体含义如下:

configure.bat

-static //指明是静态编译

-prefix "D:\Qt\qt5.12.0-static" //指明安装的目录

-confirm-license -opensource  //指明是开源版本的qt

-debug-and-release //指明需要debug版和release版,可以单独选择release版

-platform win32-msvc  //指明使用msvc编译

-nomake examples -nomake tests  //不编译样例

-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可选插件

-opengl desktop

-mp //多核编译

(4)执行成功上面命令后,会提示输入nmake和nmake install

有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。

我选择的是msvc环境,使用命令nmake即可进行编译。

执行命令(会花几个小时):nmake

 

再执行命令(主要是复制文件也要花1个小时左右):

执行nmake和nmake install后生成的文件夹qt5.12.0-static,有3G左右;

注:

MSVC自带的nmake没有多线程编译功能,有一个替代功能的软件jom可以进行nmake的多线程编译

点击jom.exe;在执行

进入源码目录,并输入如下命令:

configure.bat -static -prefix "D:\Qt\qt5.12.0-static" -confirm-license -opensource  -debug-and-release -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp

执行成功后,会提示使用jom命令进行nmake和install操作,会快很多;

10 下载并安装Qt Creator

下载地址如下:

Index of /archive/qt

 

注册账号

Qt Account Login

 可以选择MSVC201764-bit,和MinGw7.3.0 64-bit安装,安装好后可以不用,用上面安装好的静态包

11 配置静态版本的Qt构建套件 

11.1 打开安装的Qt Creator

11.2 配置Qt Versions

11.3 配置构建套件(kit)

命一个名为Qt_5.12.0_static;选择编译器C,C++;qt版本选择安装的静态版本

11.4 创建静态编译的QT Creator工程

(1)打开QT Creator

(2) 点击”文件” ->”新建项目”,

(3)输入文件名,点击下一步

(4)选择构建套件,这里选择静态编译的构建套件 ;新建MainWindow的窗体类型,编写代码

 (5)执行“qmake”后,执行“构建”,再点击运行

运行后生成如图界面

(6)生成如下.exe文件,可以拷贝到任意电脑进行运行,运行时无需拷贝包含其他文件;此文件比动态编译生成的exe文件大

 D:\001_qt_test\hello_world\build-hello_world-Qt_5_12_0_static-Release\release

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows上使用Qt进行静态编译可以将Qt相关的库文件嵌入到生成的可执行文件中,使得该程序在其他Windows系统上运行时不需要依赖Qt安装。以下是一个简单的Windows Qt静态编译教程: 1. 安装Qt开发环境:从Qt官网下载和安装Qt开发工具包。确保选择想要的Qt版本和安装目录。 2. 下载Qt源代码:从Qt官网下载源代码,并解压到一个合适的目录。 3. 设置环境变量:打开命令提示符窗口,设置Qt安装路径为环境变量。例如,如果Qt安装在"C:\Qt\5.15.2\mingw73_64",则需要将该路径添加到系统的PATH环境变量中。 4. 打开Qt源代码目录:在命令提示符窗口中,使用cd命令进入Qt的源代码目录。 5. 配置编译选项:运行以下命令来配置编译选项: ``` configure -static -prefix "C:\Qt\StaticBuild" -platform win32-g++ -developer-build -opensource -confirm-license ``` 其中,"-prefix"参数指定了Qt静态库的安装目录,可以根据需要进行修改。 6. 编译源代码:运行以下命令来编译Qt源代码: ``` mingw32-make ``` 这个过程可能需要一些时间,具体时间取决于你系统的配置和Qt源代码的大小。 7. 安装静态Qt库:运行以下命令来安装静态Qt库: ``` mingw32-make install ``` 这将把静态Qt安装到之前指定的安装目录。 8. 创建Qt项目:使用Qt开发工具创建一个新的Qt项目。 9. 修改项目配置文件:打开项目文件(.pro文件)并添加以下代码,以告诉Qt使用静态库: ``` CONFIG+= static ``` 10. 重新编译项目:重新编译项目,并确保生成的可执行文件不依赖于外部的Qt库。 以上就是一个简单的Windows Qt静态编译教程静态编译可以提供更方便的发布和部署方式,但可能会导致可执行文件的体积增加。根据实际需求和项目要求,可以选择是否进行静态编译

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值