`
ugmtm78u
  • 浏览: 13761 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法

 
阅读更多

Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法
2010年12月02日
  当下,自己有了更多的时间给自己做喜欢的事情,在此期间,我发现了Qt和wxWidgets,两个都十分power的framework。其他的废话不多说,先让我们看看如何建立Windows 环境下的Qt开发环境。
  1,计算机软件环境。
  操作系统: Microsoft Windows 7 旗舰版
  IDE: Microsoft Visual Studio 2005 Team Edition for Software Developers
  2,下载Qt吧。
  现在的Qt已经被Nokia公司收购,并且将原来的授权模式做了更改,目前分为开源版和商业版本。对个人用户来说,选择Open Source版本就足够了,不影响使用,只不过,我们需要比商业版Qt似乎要多做一些事情,或者说,开发过程变得更加“坎坷”吧。
  首先,Qt的官方网站http://qt.nokia.com,这里有你所需要的所有关于Qt的“家庭琐事”,包括Qt及其资源,关于Qt的文档和一个官方的论坛。这样方便所有Qt用户能够更好的了解Qt,使用Qt。应该说,商业化的东西的确比Free software要做得好,一应俱全。
  Ok,我们单刀直入,打开这个链接:
  http://qt.nokia.com/downloads/windows-cpp-vs2008
  这里是windows环境下,visual studio 2005, 2008的开发环境下载页面,在这里能够下载到针对上述环境的Qt SDK,其中包括了所有代码和已经预编译好的framework文件列表。在写这篇blog的时候,我能够下载到的最新版本呢是ver:4.6.3。当您阅读这篇文章的时候,可能某些事情已经发生变化了。可这又能怎么办呢,我们处在一个千变万化的时代,不过我相信,您作为一名聪明的程序员,这点儿小玩意儿不在话下。
  然后接下来需要下载的是能够配合Visual C++ 2005的Add-In包。这个包是为了能将Qt整合到Visual C++中,包括配置,设计和编译Qt应用程序。打开如下的链接:
  http://qt.nokia.com/downloads/visual-studio-add-in
  并下载最新的qt vs add-in package。同样,我写这篇blog的时候,得到的版本呢是1.1.5。
  3,安装Qt
  这个操作其实比较简单,嘿嘿,我们一步一步来。
  首先,安装Microsoft Visual Studio 2005。可以按照默认的设置安装,也可以按照自己的需要安装这个IDE。不过,Visual C++ 2005是必须的(毕竟没有VC,咱啥也干不了。不是吗?)。
  接着,安装最新版本的DirectX SDK。需要安装DirectX SDK这个过程,的确一开始的时候,我自己也觉得很莫名其妙。但在后续的编译Qt库文件的时候,configure.exe文件会提示你需要这个SDK。反正....咱不管啦,安装先。
  接下来,主角出场了,我们需要安装Qt SDK。我默认设定将Qt安装在Y:\盘,这个也是我的工作习惯,几乎所有的开发工具和编译环境,或者framework我都安装在Y:\盘下。其安装目录为:
  Y:\Qt\4.6.3
  最后,我们需要安装的是qt的Visual C++的add-in包。这个安装路径可以自己随便定义。这个软件会在安装的时候,根据环境进行配置。
  4,编译Qt。
  到了这个时候,我们就需要自己编译Qt framework,可以根据我们自己的需要来编译。不过呢,事实上,我们可以不做这一步,不过,如果不做这一步的话,作为程序员的我们,需要付出一些......呃......代价。
  由于Qt的发行版本中,存在两种版本,LGPL版本和商业版本。这两个版本之间,从内容上看,应该是一模一样的,但要是这样的话。对于一般的商业用户来说,何必需要花钱去买商业版呢?哈哈。很明显,还是存在某些差异的,虽然在Qt的官方网站上并没有说明差异上的细节(只是说明一些开源代码和封闭代码的普通区别罢了)。但是事实上,开源版本的Qt对Windows Visual C++只是部分支持,并非完全支持。这个也的确在后面的开发过程中体现出来了。 比如,我们在VC中新建一个Qt工程并编译,其中,release版本的Qt程序能够完全运行,没有任何问题。但是debug版本的Qt程序并不能运行,无论是debug模式下运行还是在Windows环境下运行,都会跳出错误信息并自动退出。其原因就是在于,LGPL版本的Qt framework中并没有给出debug版本的library(这一招够狠的)。
  综合上述问题,我们需要花上一定时间和精力来编译Qt framework。
  在我自己一个人试图编译Qt的时候,发现始终无法成功的编译Qt系统;要么就是编译成功了,在开发Qt程序的时候,出现了链接失败的问题。现在我将给大家一个比较简单的方法来成功编译含有debug和release两种静态链接库的Qt framework。因此,注意,如果您想要使用动态链接库版本的Qt的话,请忽略这篇Blog。
  首先,我们可以利用Windows的控制台(console,或者命令行系统)批处理脚本来帮助我们实现整个编译的过程。在Qt的安装目录中,例如:Y:\Qt\4.6.3\,新建一个控制台批处理文件,可以将该文件命名为auto.bat。用文本编辑器打开该文件,敲入如下的命令:
  @echo off
  set QTDIR=%CD%
  set PATH=%PATH%;%QTDIR%\bin
  set QMAKESPEC=win32-msvc2005
  call "D:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86
  call "D:\Program Files\Microsoft DirectX SDK (June 2010)\Utilities\bin\dx_setenv.cmd" x86
  call configure.exe -debug-and-release -static -qt-sql-odbc -qt-sql-sqlite -no-webkit
  cd src
  call nmake
  cd ..
  @echo on
  这里需要注意的是,我们必须要设定QMAKESPEC,这是告诉Qt,需要编译适合使用在哪个平台下的Qt,所有能够支持的Qt版本在Qt安装目录Y:\Qt\4.6.3\mkspecs中找到。另外一个需要注意的是,在调用VC和DX的设定环境变量批处理文件的时候,需要传入x86的参数。
  在开始编译Qt之前,第一需要调用的是Qt的configure.exe命令文件。在所有参数列表中,-debug-and-release是必须的,因为咱们之所以废这么大劲儿编译Qt,就是为了需要一个包含了debug 和 release 的 Qt framework库文件。因此不要忘了这个参数;另外-static参数也很重要,因为我们需要的是静态链接库文件。在后面的参数列表中,大家可以根据自己的需要,酌情加减参数。需要指出的是-webkit是用来编译第三方浏览器webkit的库文件,编译这个系统需要花费非常长的时间,我这里就把这个文件忽略了;因为Qt编译的时间非常长,大家可以考虑在configure的参数列表中加入参数-fast。
  输入完上述批处理命令之后,保存auto.bat文件。
  接下来,就需要修改Qt的编译选项了,为啥呢。因为Qt默认的编译对象为动态链接库,因此在编译配置文件中设置的都是针对dll类型的编译参数,但我们目前需要编译的是Qt的静态链接库。进入目录:Y:\Qt\4.6.3\mkspecs\win32-msvc2005,用文本编辑器打开该目录中的文件qmake.conf文件,寻找关键字“QMAKE_CFLAGS_RELEASE”和“QMAKE_CFLAGS_DEBUG”,并将里面的参数-MD和-MDd分别修改成为-MT和-MTd,然后保存关闭文件。
  在晚上上面的工作之后,现在基本上都可以了,进入windows 控制台,进入Qt的安装目录,键入auto.bat进行编译。接下来的2~4个小时里面,我们就可以做自己的事情啦,看看书,睡个小觉都可以。
  5,测试
  经过漫长的编译过程,Qt总算编译好了,如果严格按照上面的操作方法的话,真个Qt编译过程不会出现什么错误(不过,Qt编译的时候,输出的信息里面也能够看到零零星星的warning信息,想必Qt始终没有真正完成过)。
  接下来,我们需要做一件小事情。删除不需要的lib文件。这个听起来有点儿匪夷所思,是的,我自己在生产Qt lib的时候,也是觉得莫名其妙。在Qt的lib库目录中,除了之前我们自己编译生成的lib文件以外,还有以4作为结尾的lib文件,比如QtCore4.lib,这些文件是原来的Qt官方生成的Lib文件,这些lib照例说放在原处不会出现任何问题。但是事实上,我经过尝试,始终是失败的,也就是说,类似于QtCore.lib和QtCore4.lib,只能存在其中一个。因为像QtCore.lib这类我们之前生成的文件是静态链接库的,所以我们需要将类似于QtCore4.lib这样的动态连接库链接lib文件,存放到另外的文件夹进行备份,当然也可以直接删除。 我们判断新老文件的办法只要看时间戳就可以了。
  到目前为止,生成Qt framework的工作基本完成了。开始进入开发阶段。我们来新建一个Qt工程来实验一下。
  运行Visual C++ 2005,将Qt加入IDE的环境变量。打开菜单Tools->Options...->Projects and Solutions->VC++ Directories添加如下内容:
  Executable files: Y:\Qt\4.6.3\Bin
  Include files: Y:\Qt\4.6.3include
  Library files: Y:\Qt\4.6.3\lib
  然后,我们新建一个Qt GUI Application,在设置向导中,我们都是使用默认选项。在项目的属性中,C/C++ -> Code Generation ->Runtime Library,相应的修改为 debug模式下为-MTd, release模式下使用-MT。另外,我们同样需要将Additional Denpendencies选项中,所有带4后缀的lib文件,改成不带4的lib文件,之所以如此详见上文。
  最后,编译这个Qt应用程序工程,生成可执行文件。看看结果如何。
  ......
  嘿嘿,是不是看到编译过程中的链接错误了,哈哈。因为我们在Additional Denpendenics中还缺少两个lib文件,分别是imm32.lib,winmm.lib,ws2_32.lib。再次进行光荣的compile命令。
  ......
  通过了。运行。
  ......
  Bingo,成功。接下来的事情,要靠大家自己了,嘿嘿,努力吧!
  祝大家coding愉快,哈哈
分享到:
评论

相关推荐

    Qt5.15.12静态库-已编译版本-Windows64位-VS2019编译

    动态库则在运行时被加载,生成的可执行文件较小,但需要相应的动态链接库文件才能运行,便于资源共享和更新。 **3. Windows 64位兼容性** 此版本的Qt库是为64位Windows系统设计的,这意味着它可以充分利用64位...

    Qt6.22 Mingw64静态编译

    静态编译意味着在编译应用程序时,将所有依赖的库(如Qt库)合并到最终的可执行文件中,这样生成的程序在运行时不再需要外部的动态链接库(DLLs)。这对于那些需要分发或在不可预知环境运行的应用程序来说非常有用,...

    qt5.15.9-static 静态编译库,已经编译完毕,直接安装即可

    4. 使用Qt Creator或者命令行进行项目配置,选择静态链接的编译选项,指定对应的Qt版本路径。 一旦设置完成,开发者就可以利用这些库开始编写和编译应用程序。静态编译的QT5.15.9库使得程序可以在没有安装QT环境的...

    qt-opensource-windows-x86-5.14.2

    2. **Qt库**: 包含所有必要的静态和动态库文件,如.lib和.dll,这些库文件是开发人员在构建应用时链接到的。 3. **头文件**: .h文件,提供了Qt API的声明,供开发者在源代码中引用。 4. **Qt Creator IDE**: 一个...

    Ubuntu下Qt静态编译以及使用

    通常情况下,Qt 提供的是动态链接库(Dynamic Link Libraries, DLLs),这意味着当发布应用程序时,除了应用程序本身之外,还需要将所有依赖的 DLL 文件一起打包。这种方式在某些场景下不太方便,尤其是在不同的 ...

    ubuntu 上 qt静态编译版本制作

    解决这一问题的有效方法之一就是使用Qt静态库进行编译。本文将详细介绍在Ubuntu 14.04系统上如何制作Qt 5.9.0的静态编译版本。 #### 软件环境 - **操作系统**: Ubuntu 14.04.5 LTS - **Qt版本**: Qt 5.9.0 (下载...

    QT5.9.6静态编译环境设置

    本文通过详细的步骤和注意事项,提供了一套完整的QT5.9.6静态编译环境设置方法。通过遵循这些步骤,开发者可以成功搭建一个静态编译的QT开发环境,并且理解静态编译对应用程序开发的影响。需要注意的是,静态编译会...

    Qt交叉编译后aarch64-linux-gnu-成功运行在Zynq UltraScale+MPSoC上

    如果不想自行编译,可以从提供的链接下载预先编译好的Qt静态库文件。 交叉编译Qt源码时,需要配置Qt Creator以支持aarch64平台。这涉及在Tools > Options中设置Kits,包括选择添加的GCC编译器(GCC_mock和GCC++_...

    QT5编译freetype生成静态以及动态库源码,Linux及Windows都可编译

    4. **配置编译选项**:在项目设置中,指定编译目标为静态库(`libfreetype.a`)和动态库(`libfreetype.dll`)。对于Linux,这通常在.pro文件中通过`QMAKE_LFLAGS`和`QMAKE_CXXFLAGS`设置;对于Windows,可以在项目属性...

    qt静态编译windows配置

    在Windows平台上进行Qt静态编译是一项复杂而关键的任务,它涉及到多个步骤和注意事项。Qt静态编译意味着将所有依赖项包含在最终的可执行文件中,这样用户在运行程序时无需安装额外的库或环境。这尤其适用于分发给...

    QtXlsx开源库 编译好的静态库lib和动态库dll

    通过本资源提供的编译好的库文件,开发者可以直接在win7环境下,利用VS2010+Qt5.5进行开发,极大地简化了库的配置和使用流程。无论你是新手还是经验丰富的Qt开发者,QtXlsx都能帮助你更高效地处理Excel任务。

    Qt极限精简静态编译,生成的EXE只有2.2M(未压缩)

    进行Qt静态编译的过程通常包括以下步骤: 1. 下载并安装Qt源码,包括必要的编译工具,如MinGW或Visual Studio。 2. 配置Qt源码,指定静态编译选项,如`-static`,并裁剪不需要的模块。 3. 使用Qt的配置工具(qmake...

    Qt5.15.3:vs2019编译生成的32位动态库

    总结,编译Qt 5.15.3 for VS2019的32位动态库涉及多个步骤,包括安装依赖、配置源代码、编译和安装、设置环境变量以及验证和使用。这个过程可能较为复杂,但完成后可以为特定需求定制Qt库,提供更好的性能和兼容性。...

    Qt将代码如何生成静态链接库

    ### 生成Qt静态链接库 1. **创建测试目录**:首先,你需要为你的库创建一个专门的目录,例如`lib`。 2. **编写源代码**:在这个目录下,创建必要的源代码文件,如`mywindow.h`和`mywindow.cpp`。`mywindow.cpp`应...

    Qt5.7.1-msvc2013-x86-static-release

    **Qt5.7.1-MSVC2013-x86-Static-Release:深入理解Windows平台下的Qt静态库** Qt是一个跨平台的应用程序开发框架,被广泛用于创建图形用户界面和其他应用程序。这个特定的版本,"Qt5.7.1-MSVC2013-x86-static-...

    win7下使用VS2015编译Qt5.10.1静态链接库

    为了在Windows环境下使用Visual Studio 2015编译Qt5.10.1的静态链接库,首先需要完成以下准备工作: 1. **下载Qt5.10.1源代码**:访问Qt官方网站提供的下载页面(...

    Qt 5.15.1 MSVC static 静态编译包

    在Windows环境下,使用Microsoft Visual C++(MSVC)编译器进行静态编译,可以将Qt库与应用程序链接在一起,形成一个独立的可执行文件,无需在目标机器上安装额外的Qt库。 静态编译Qt的优势在于: 1. **便携性**:...

    qt5.6.1 编译的静态库

    在本案例中,我们讨论的是QT 5.6.1的静态编译库,这意味着库已经被编译成一个单一的可执行文件,无需在运行时依赖外部的动态链接库。 **静态库的优势:** 1. **便携性**:静态库使得程序可以在没有特定动态库环境的...

Global site tag (gtag.js) - Google Analytics