代码改变世界

关于编译Qt以及驱动的一点总结吧

2012-05-28 09:56  Rollen Holt  阅读(8339)  评论(29编辑  收藏  举报

通过这几次的折腾,对编译Qt算是有一点的心得吧:

    首先我们编译QT的时候需要面对的是下载源代码,一般情况下我们建议下载qt-everywhere-opensource-src-4.8.2.zip这种形式的源代码。这样编译起来的问题也就很少了。当然如果人品不行的话,还是会出现很多的问题的。

    其次是选择动态编译还是静态编译,默认是动态的,我之前一直打算采用静态编译的,这样分发程序的时候很简单,但是在静态编译的时候出现许多的问题,导致我来来回回编译了几次。

    关于静态编译请参看:这篇文章 文章中是使用vs2010编译的Qt4.8.0版本。如果你刚好也是在windows下面打算采用vs进行编译,这篇文章很不错,但是有一些许多注意的问题。

  •     qt的安装路径,以及以后使用vs建立qt项目的时候,不能有中文,路径中也不能有空格,比如program files之类的路径也是不行的。
  •     删除源码包中bin目录下的syncqt和syncqt.dat文件,如你不放心可将其改名或剪切到别的位置。如不修改将发生 Perl not found in environment - cannot run syncqt 错误。
  •     一定要修改\mkspecs\win32-msvc2010下的qmake.conf文件,将其中的
    QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t-改成QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t
    注意末尾的”-“号区别。如不修改将来如有项目使用wchar_t,qt却编译成wchar_t-,编译会导致连接错误,提示找不到Qwstring;
  •     关于是否需要修改\mkspecs\win32-msvc2010下的qmake.conf文件中的QMAKE_CFLAGS_RELEASE,QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO,QMAKE_CFLAGS_DEBUG这3处后面的MD,MDd,取决你打算动态还是静态编译,如果是静态编译的话,改为:MT,MTd(最后还要在vs2010中的项目属性中将MD改为MT)。如果是动态编译的话,不要改。
  •     一定要修改src\3rdparty\webkit\Source\WebCore\platform下的DefaultLocalizationStrategy.cpp,定位到327行,将本行替换成return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));(由于word自动排版问题,请各位直接将以上英文部分一次性全复制,其实它们是一行,不要分行复制)。如果你仔细看原来的那行的话,你会发现双引号是错误的,如不修改将出现编译Webkit 时会出现 U1077错误。
  •     关于configure参数的说明,可以到时候输入configure -help自行查看,或者去官网。
  •     编译的时候建议使用-debug-and-release,如果只是单纯的编译debug或者release的时候,可能会出现一些问题。尤其是很容易出现debug调用release的东西或者相反,这种东西很烦人的,所以建议都变异,占用不了多大的空间。
  •     使用-nomake demos -nomake examples -nomake docs选项将加速编译过程,建议在编译qt源码的时候都在configure参数中加上这些,也就是不编译demos和docs和examples文件夹下面的东西,我知道这些是很好的例子,但是我的意思是在你不能确保自己能够一次性编译成功Qt的情况下,加上这些参数,能够为你节省大量的时间,因为万一编译错误的话,你又得重新来编译了。如果你日后想编译demos或者examples的时候,去demos或者examples的目录下,qmake dems.pro或者qmake examples.pro然后nmake就行了。
  • 使用-mp选项可以加速,适合多核用户提高编译速度
  • 千万不要在nmake之后,执行nmake clean,nmake confclean。别相信网上说的那些什么先备份在删除的,再说这些东西占用不了几个空间的。

 

下面说说编译Qt的mysql,oracle驱动吧。安装好oracle或者mysql之后,命令很简单,对于Mysql执行下面的命令(注意修改自己的路径名,最好别有中文和空格):

首先cd到  D:\qt\src\plugins\sqldrivers\mysql
然后qmake INCLUDEPATH+="D:\phpdev\mysql\include" LIBS+="D:\phpdev\mysql\lib\libMySQL.lib" MySQL.pro 
最后nmake

  然后在你的D:\qt\plugins\sqldrivers(注意对应你的安装路径)会有8个文件。

对于oracle的话,基本差不多,命令如下:

set INCLUDE=%INCLUDE%;D:\app\rollen\product\11.2.0\client_1\oci\include
set LIB=%LIB%;D:\app\rollen\product\11.2.0\client_1\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake oci.pro
nmake

也会产生8个文件。如图(由于我的博客模板的问题,图片部分没有显示,其中mysql的文件8个,oracle的8个):大家可以右键,在新标签页查看图片。

然后剩下的就是配置vs2010了,强烈推荐同时配置Vassist。

关于如何配置vs和VAssist的话网上有很多教程,我就不给百度和google这些公司制造去重复的负担了,呵呵。

笔者之前静态编译N次,都遇到了错误,最后没办法,采用动态编译,一次性成功,哈哈。

另外关于mysql和oracle11g的qt驱动,需要的朋友给我邮件,或者评论。

 参考资料:

(原创)亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序

VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布

文章跟新

  许多朋友还是不会编译Qt,其实吧,我觉的动态编译没什么不好,而且基本都是一次性成功的。为什么非得搞静态编译。

  另外,许多朋友询问驱动的事情,所以我上传编译好之后的驱动到我的新浪微盘。下载地址:http://vdisk.weibo.com/s/a9JGt

       编译环境:vs2010+Oracle11g/mysql/lited4.。。