VS2010使用静态编译的qt库(Qt 5)

Qt 5引入了一种新的编写方式。

Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便。

虽然以前为了方便,直接安装的qt-windows-opensource-5.0.2-msvc2010_32-x86-offline.exe, 省去了自己编译这一步,但官方提供的库是动态编译的,是以lib + dll形式存在的,所以没法在我的程序中静态编译。

为了能够得到静态编译的效果,毅然选择自己编译源码,生成静态库,下面是我编译静态库的全部过程。

1、下载qt源码,5.0.2 qt-everywhere-opensource-src-5.0.2.zip 
       2、解压到F:\qt-src-5.0.2 
       3、查看readme文件,其中有提到,需要下载3个安装工具 
   Windows: 
   --------

Open a Windows SDK (7.0, 7.1 or later) command prompt. Ensure that the 
     following tools can be found in the path: 
     * Perl version 5.12 or later   [http://www.activestate.com/activeperl/] 
     * Python version 2.7 or later  [http://www.activestate.com/activepython/] 
     * Ruby version 1.9.3 or later  [http://rubyinstaller.org/]

你可以选择下面地址直接下载: 
     1. Perl 5.8 or later 
        x86  http://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.16.3.1603/ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi   
       amd64  http://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.16.3.1603/ActivePerl-5.16.3.1603-MSWin32-x64-296746.msi   
       2. Python 2.7 or later 
       x86  http://www.activestate.com/activepython/downloads/thank-you?dl=http://downloads.activestate.com/ActivePython/releases/2.7.2.5/ActivePython-2.7.2.5-win32-x86.msi   
       amd64  http://www.activestate.com/activepython/downloads/thank-you?dl=http://downloads.activestate.com/ActivePython/releases/2.7.2.5/ActivePython-2.7.2.5-win64-x64.msi 
      3. Ruby 
              amd64  http://rubyforge.org/frs/download.php/76806/rubyinstaller-2.0.0-p0-x64.exe

4、进入Open Visual Studio Command Prompt (2010), cd 到源文件目录下,执行以下命令

F:\qt-src-5.0.1 > configure -prefix F:\qt-static -debug-and-release -static -platform win32-msvc2010 -no-c++11  -no-icu -opengl desktop -qt-sql-sqlite -qt-zlib -qt-style-windowsvista -qt-libpng -qt-libjpeg -nomake demos -nomake examples -nomake tests -mp

5、执行完后,直接运行nmake(漫长的等待中)

6、打开VS2010, Qt5--> Qt Options    添加版本

static5.0.2      F:\qt-src-5.0.2\qtbase

7、创建qt工程后,Qt-->Qt Project Settings, 选择静态库版本:static5.0.2

8、首先我们在Debug模式下运行,会有以下链接错误 
      Qt5Cored.lib(qeventdispatcher_win.obj) : error LNK2019: unresolved external symbol [email protected] referenced in function "public: void __thiscall            QEventDispatcherWin32Private::doWsaAsyncSelect(int)" ( [email protected]@@[email protected] )

这个链接容易解决,属性页-->Link-->input  Additional Dependencies 加入Ws2_32.lib, 然后运行

9、虽然链接错误解决了,但运行仍会报错

解决这个问题,需要花费一些时间了,下面就直接提供最终解决方案了。

对于只引用qt默认的三个库的程序,依赖lib列表如下: 
imm32.lib 
winmm.lib 
Ws2_32.lib 
qtmaind.lib 
Qt5Cored.lib 
Qt5Guid.lib 
Qt5Widgetsd.lib 
opengl32.lib 
Qt5PlatformSupportd.lib 
qwindowsd.lib

注意Debug模式静态库名字后面都是带d的,另外qwindows.lib单独在一个文件中,需要在属性页-->Link-->General Additional Library Directories加入lib的目录, 
F:\qt-src-5.0.2\qtbase\plugins\platforms

10、以上lib加好后,还有关键一步,在main函数文件中加入以下两行代码 
     #include <QtPlugin> 
    Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

11、运行程序,OK程序可以跑起来了, 查看以下程序,发布版exe接近7M(默认界面)

12、以上流程只是实现了qt库的静态编译,如果你想你的程序独立于编译器的话,还得设置Runtime Library  为/MT 或  /MTd

时间: 2025-01-17 00:59:37

VS2010使用静态编译的qt库(Qt 5)的相关文章

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的.只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查

VS2010使用静态编译的qt库

Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便. 虽然以前为了方便,直接安装的qt-windows-opensource-5.0.2-msvc2010_32-x86-offline.exe, 省去了自己编译这一步,但官方提供的库是动态编译的,是以lib + dll形式存在的,所以没法在我的程序中静态编译. 为了能够得到静态编译的效果,毅然选择自己编译源码,生成静态库,下面是我编译静态库的全部过程. 1.下载qt

静态编译Qt5.4.1和Qt WebKit

blog文章地址:http://godebug.org/index.php/archives/133/ WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉得自己编译webkit费力不讨好,所以都是用的qt官方编译好的,至于静态编译webkit,我之前一直以为是根本不可能的.后来看qt forum上说其实是可以的,不过是因为开源协议的问题qt默认的静态编译只是把webkit给排除了,自己编译一下webkit就好了,既然如此,那我就当小白试一下.不

静态编译OpenSSL并整合到Qt

静态编译OpenSSL并整合到Qt 来源 https://blog.csdn.net/lixiaoxin1989/article/details/78421573 MSVC版本: 1. 下载OpenSSL源码 1.1 下载OpenSSL的源码:https://www.openssl.org/source/ 1.2 解压到C:\openssl-1.0.2l 2. 编译OpenSSL源码 2.1 打开VS的命令工具: 32位: 64位: 2.2 使用cd命令定位到源码文件夹: cd C:\opens

Linux下快速静态编译Qt以及Qt动态/静态版本共存

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大部分人编译这个包居然花费了12-13个小时!但是,根据我在Windows下静态编译Qt的经验,其实这之中很多东西都是可以不用编译的,最终我大约用了40分钟编译完成了全部内容.如果你直接使用官方的sdk安装,那么你就已经有了一个动态库,现在你又通过源

Linux下静态编译Qt

Qt采用编译的方式安装的时候,配置中默认的编译方式是动态编译的,但是有时候你编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译你的程序,Qt要实现静态编译必须库文件也是静态编译的,所以在此介绍一下qt如何来进行静态编译 第一步:下载源码包 Qt/X11版本:qt-x11-opensource-src-x.x.x.tar.gz 第二步:解压缩 tar zxvf qt-x11-opensource-src-x.x.x.tar.gz 第三步:进入到刚才解压缩后的文件夹下并进行配置,如

静态编译 Qt 5.6

源码下载 Qt git地址:git://code.qt.io/qt/qt5.git 推荐用 SourceTree 客户端来克隆源码 准备工作 系统 Windows 7 或者 Windows 10 编译器 Visual Studio 2013 Update 5 或者 Visual Studio 2015 Update 1 安装ActivePerl 安装Python 静态编译ICU库 ICU库需要把Debug和Release版本都编出来 静态编译openssl 编译webkit需要的环境 Ruby

记录下 QT Linux 静态编译遇到的坑

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大部分人编译这个包居然花费了12-13个小时!但是,根据我在Windows下静态编译Qt的经验,其实这之中很多东西都是可以不用编译的,最终我大约用了40分钟编译完成了全部内容.如果你直接使用官方的sdk安装,那么你就已经有了一个动态库,现在你又通过源

QT全平台设置图标,全平台静态编译 good

1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装文件. QT开发的程序发布的时候经常采用两种方式: l  静态编译,可生成单一的可执行文件. l  动态编译,需同时附上需要的dll文件. 2.  发布准备 不管采用哪种方式,首先我们要把项目的发布做一些准备,例如:准备程序的图标,将项目编译成release等.   2.1. 设置程序图标 应用程序