QT5 下静态库的编译和使用(转载)

最近在学习QT,QT的优点不必说了。但是也存在一些弊端,最头疼的就是库的编译,生成exe文件,必须要将其一用的dll文件拷贝到同一个目录下,本人深受其苦,所以上网查了一些资料,方知QT也可以编译静态库,以下内容为转载,帮了我的大忙,所以贴出来,希望能帮到更多的人。。

1.首先下载源码(版本:5.2.1):
    http://download.qt-project.org/official_releases/qt/5.2/5.2.1/single/qt-everywhere-opensource-src-5.2.1.zip

    解压到目录qt-everywhere-opensource-src-5.2.1\

2.更改VC运行库的配置:
    VS2012对应的配置文件是:qt-everywhere-opensource-src-5.2.1\qtbase\mkspecs\win32-msvc2012\qmake.conf
    把MD改为 MT,  MDd改为MTd,共三处:

    QMAKE_CFLAGS_RELEASE    = -O2 -MT
    QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
    QMAKE_CFLAGS_DEBUG      = -Zi -MTd

3.建立一个批处理文件:
    比如建立一个文件名为vs2012.build.bat的bat文件,放到目录qt-everywhere-opensource-src-5.2.1下面,然后进行编辑,内容如下:
    configure-confirm-license -opensource -platform win32-msvc2012 -vcproj-debug-and-release -static -prefix "D:\Qt\5.2.1-static" -no-opengl-qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-angle -nomaketests -no-compile-examples

4.运行vs2012.build.bat:
   首先必须要运行VS2012的批处理文件(安装后会有这个快捷方式):VS2012 x86 Native Tools CommandPrompt.bat,这样就打开了一个控制台窗口,CD到目录qt-everywhere-opensource-src-5.2.1,再运行vs2012.build.bat,完成后检查是否成功,成功后就继续下一步.

5.开始编译:
   编译只要执行 nmake即可,这是一个漫长的过程,................,不出意外最后没有任何错误的结束了。

6.安装:
   上述编译成功后,只要执行 nmakeinstall就会把最终的bin/lib/include等等相关的文件复制到我们之前配置的目录 D:\Qt\5.2.1-static,至此静态库编译就全部完成了,庆祝一下吧! 使用VS2012编译QT <wbr>5.2.1静态库


7.安装和配置QT VS Add-in:
    但不要高兴的太早,我们必须得建立一个测试程序运行起来才算成功,有一个VS2012的插件是必须要安装的,那就是Qt VS Add-in,我下载的是最新的:
http://download.qt-project.org/development_releases/vsaddin/qt-vs-addin-opensource-1.2.3-alpha.exe,安装完成后运行VS2012,会多一个"Qt5"的菜单,运行"Qt Options"
使用VS2012编译QT <wbr>5.2.1静态库

增加新的QT版本配置:
使用VS2012编译QT <wbr>5.2.1静态库
Ok后配置就完成了。

8.建立QT Project进行测试,这一步很关键:
    创建一个qttest的QT应用程序,开始编译,啊,居然编译不通过!当然不会通过,因为我们编译的QT5.2.1的VC运行库是MT和MTd,工程向导创建的缺省是MD和MDd,那就改一下吧,Debug版本改为:Multi-threadedDebug (/MTd),这下编译终于通过了,再次 使用VS2012编译QT <wbr>5.2.1静态库,离成功又近了一步,那就赶紧Run吧,然后居然弹出一个Assert窗口 使用VS2012编译QT <wbr>5.2.1静态库

使用VS2012编译QT <wbr>5.2.1静态库

当然和大家一样肯定是去google错误了,获取的信息是:插件无法加载,毕竟我们现在是staticlibrary,当然无法加载 dll了,好在官方给出了staitc library加载plugin的办法:使用宏  Q_IMPORT_PLUGIN,在main.cpp中增加代码如下:

#include < QtPlugin >
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugi n)
至于为什么是QWindowsIntegrationPlugi n这个名字,在网上搜索了很久都没找到,最后我是在qwindows.lib中搜索到的.
    继续编译,报错unresolvedexternal symbol "struct QStaticPlugin const __cdeclqt_static_plugin_QWindowsIntegrationPlugi n(void),这个简单,增加lib path:  $(QTDIR)\plugins\platforms,然后增加qwindowsd.lib(Release是qwindows.lib).
    再进行编译,又link出错:
qwindowsd.lib(qwindowsintegration.obj) : error LNK2001:unresolved external symbol "public: virtual void __thiscallQBasicFontDatabase::populateFontDatabase(void)
    那肯定是有依赖的lib没增加,最后找到了需要再手动增加  Qt5PlatformSupportd.lib(同样Release是Qt5PlatformSupport.lib),最终QTlib文件有这样几个文件:
              Qt5Cored.lib
              Qt5Guid.lib
              Qt5Widgetsd.lib
              qwindowsd.lib
              Qt5PlatformSupportd.lib
      这下终于编译通过并运行成功了!这下可以庆祝了。 使用VS2012编译QT <wbr>5.2.1静态库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值