详解VS2010编译Qt 4.7.2 静态库(测试成功)
创始人
2024-08-01 13:20:17
0

详解VS2010编译Qt 4.7.2 静态库是本文要介绍的内容,从http://qt.nokia.com 下 载QT源代码,注意是源代码。我下载到的是QT4.7.2版,文件名为qt-win-opensource-src-4.7.2.zip 解压,注意不要解压路径不要含有空格或中文(对于某些系统中用户名是中文的情况,在参考的第3个文章中有解决办法,如下面),我把它解压到了D:\SDK\Qt_4_7_2_VS2010里 ***目录如下:

  1. D:\SDK\Qt_4_7_2_VS2010\qt-everywhere-opensource-src-4.7.2\  

准备一个存放编译后“成品”的文件夹,我准备放在D:\SDK\Qt_4_7_2_VS2010\static里
 
用记事本或其它编辑器打开D:\SDK\Qt_4_7_2_VS2010\qt-everywhere-opensource-src-4.7.2\mkspecs\win32-msvc2010\qmake.conf(注 意VC版本号),按需要修改(修改部分参考文章1,文章1中提到了修改3个内容,但是自己做的时候没有完全按照文章1来),文章1修改部分如下:

如果不希望编译出来的DLL或EXE链接到VC运行时库,就把-MD改成-MT,把-MDd改成-MTd(查找替换)。

[可选]如 果做了上一步,那么就不需要嵌入manifest了,去掉CONFIG+= 后面的embed_manifest_dll embed_manifest_exe。

VC默认是“将wchar_t 视为内置类型”的,所以建议去掉-Zc:wchar_t-, 否则以后用到一些与wchar_t有关的函数(如fromWCharArray)时,就要在项目属性里设置“将wchar_t视为内置类型”为No了)。

自己修改如下:

如果不希望编译出来的DLL或EXE链接到VC运行时库,就把-MD改成-MT,把-MDd改成-MTd(查找替换)。进入“Visual Studio 2010 命令提示”,其它版本的VC也一样。

进入解压的地方,比如我的: D:\SDK\Qt_4_7_2_VS2010\qt-everywhere-opensource-src-4.7.2。(小提示,在控制台里输入前几个字符再按tab 键,可以自动填充路径、文件名,MS在向Linux Shell学习?) 

键入命令

  1. configure -debug-and-release -static -fast -opensource -platform win32-msvc2010   
  2. -qt-gif -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-mysql  
  3.  -plugin-sql-mysql -qt-sql-odbc -plugin-sql-odbc -qt-sql-sqlite -plugin-sql-sqlite  
  4.  -prefix D:\SDK\Qt_4_7_2_VS2010\static -nomake docs -nomake demos -nomake examples 

(去掉了 -qt-sql-mysql -plugin-sql-mysql,因为编译到多一半的时候会提示找不到mysql的一些文件,估计还要下一些第三方的东西才能编译qtsql库吧,所以试了一次出错之后,直接去掉了)

具体命令的参数在参考文章1、3中都有介绍

输入configure -help可以显示所有选项的帮助信息,上面是我用的选项,解释一下:

-prefix 路径名 编译后的安装路径

-debug-and-release 编译Debug和Release版本

-static 编译静态库,如果不指定,默认为编译成DLL

-opensource 使用LGPL协议,如果不指定也行,configure运行后会问的

-no-qt3support 不用编译与QT3兼容的一些废弃函数,如果你比较熟悉QT3,还是去掉它吧

-no-dbus 不用链接到DBus库,这个库偶好像在Linux里看到过,Windows里不用。

-no-phonon 同上,不要链接

-no-webkit 是否编译Web相关的一些QT子库,加上这个可以省不少编译时间,就看你是否准备用这些库了。

-qt-gif 使用QT自带的gif库

-qt-zlib 使用QT自带的zlib库

-qt-libpng 使用QT自带的libpng库

-qt-libmng 使用QT自带的libmng库

-qt-libtiff 使用QT自带的libtiff库

-qt-libjpeg 使用QT自带的libjpeg库

其中, -nomake docs -nomake demos -nomake examples -platform win32-msvc2010都是参考的文章3中的内容。
 
configure之后,把QT源码里修改后的“mkspecs” 文件夹复制到准备存放“成品”的地方,比如我的就是把D:\SDK\Qt_4_7_2_VS2010\qt-everywhere-opensource-src-4.7.2\mkspecs复 制到D:\SDK\Qt_4_7_2_VS2010\static里 。(文章1中是想将mkspecs拷贝,然后再static文件夹中修改,没彻底搞明白,但是自己是修改并congifure之后进行的拷贝)

  1. Nmake        (大概1个小时)   
  2. Nmake install     (大概2个小时)(同样在D:\SDK\Qt_4_7_2_VS2010\qt-everywhere-opensource-src-4.7.2
  3. 目录下执行,功能是将生成的lib文件安装到之前命令中 -prefix指向的位置)   
  4. Nmake clean    (5、6分钟,和static文件夹没关系,只是在源代码的文件夹中进行清理工作)  

系统中用户名是中文的情况:

在编译过程中碰到的***的问题是目录名的问题,QT本身不支持汉语目录名和带空格的目录名,就算源程序和编译目录满足这个条件,然而QT在编译过程中,会大量使用TEMP文件,Window 7系统的TEMP目录在C:\Users\[用户名]\AppData\Local\Temp下,如果当前用户是中文的名,在QT编译过程中就是致命的。***的解决办法就是吧window的TEMP目录设置在根目录下我就是设置在C:\TEMP 。(Windows下设置用户的环境变量,把里面的TEMP 和TMP 全部设置成C:\TEMP)

过程中的一次错误(操作步骤没错,只是其中一个地方马虎了一下):

详解VS2010编译Qt 4.7.2 静态库(测试成功)

发生错误,错误的原因是,运行了VS2010命令行的(X64)版本,configure后,不能nmake

因为这个问题郁闷了一下午,从来了好几次,上网查了半天,有的说是环境变量的问题,自己有手动将VS2010添加到path路径中,还是不行,后来仔细一琢磨,这个错误在网上出现的很少,应该不是普遍问题,应该是很难遇到的问题,估计自己的操作有问题,仔细一检查发现,打开的程序记录里,刚才运行的是VS2010命令行的X64兼容版本,而且从信息操作了几次,这个命令行窗口一直没关,一直用的是X64版本的命令行。

小结:VS2010编译Qt 4.7.2 静态库(测试成功)的内容后介绍完了,希望本篇对你有所帮助!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...