posts - 28, comments - 179, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Qt4.2.3编译记录

Posted on 2007-06-19 09:27 chemz 阅读(5539) 评论(4)  编辑 收藏 引用 所属分类: C++
                                Qt4.2.3编译记录
    Qt已经发布了最新架构的版本Qt4了,目前的最新版本已经到了Qt4.3,由于原来还使用
的是Qt3.3.4的版本,所以就Qt4种的2.3版进行了编译,准备升级到Qt4。这个编译过程一般
而言还算是比较的简单,只是由于Visual Studio 2005在进行了SP1后引入了一个编译bug,
导致编译Qt4时候会出现编译时错误,同时一般而言在Qt4.2.3的编译选项中包含了一些和
Visual Studio2005默认不相同的选项(同时也是标准不太兼容的地方),所以现在将编译
的具体过程进行详细的说明。

1. 设置环境变量
   首先肯定是要解压缩Qt4.2.3的源代码包到某个目录下(这里使用的是commercial版本),
   如:D:\Qt\4.2.3\。然后在系统环境目录下添加一个QTDIR=D:\Qt\4.2.3环境变量,并且
   在系统的PATH追加%QTDIR%\bin目录项,以使得可以找到编译后的库和应用程序。
2. 应用Patch
   Qt4中有两个地方需要进行修改才能够正常的编译,一个是关于编译选项的,另外一个是
   关于源代码的。
   2.1. 修改编译选项
        进入到%QTDIR%\mkspecs\win32-msvc2005\目录下,打开qmake.conf文件找到19行的
        QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-,删除后面的-Zc:wchar_t-选项,
        主要是为了保持标准兼容性以及和其他代码的兼容性,否则会出现Qt4中采用了
        wchar_t的函数不能够接受没有-Zc:wchar_t选项下的wchar_t类型;
   2.2. 修改源代码
        进入到%QTDIR%\src\corelib\tools\目录下,打开qmap.h文件找到QMultiMap类的
        定义,用如下的内容替换replace和insert函数:
        typedef QMap<Key, T>::iterator QMap_iterator;
        inline QMap_iterator replace(const Key &akey, const T &avalue){ return QMap<Key, T>::insert(akey, avalue); }
        inline QMap_iterator insert(const Key &akey, const T &avalue){ return QMap<Key, T>::insertMulti(akey, avalue); }
        并将下面的replace和insert函数的定义体给注释掉;
        同样的打开qhash.h文件找到QMultiHash类的定义,用如下的内容替换replace和
        insert函数:
        typedef QHash<Key, T>::iterator QHash_iterator;
        inline typename QHash_iterator replace(const Key &akey, const T &avalue){ return QHash<Key, T>::insert(akey, avalue); }
        inline typename QHash_iterator insert(const Key &akey, const T &avalue){ return QHash<Key, T>::insertMulti(akey, avalue); }
        并将下面的replace和insert函数的定义体给注释掉。
        之所以要这样修改是因为Visual Studio2005的SP1所引入的bug导致的。
3. 安装协议文件
   要安装商业版本就必须具有安装商业的license,将.qt-license文件拷贝到用户的
   %USERPROFILE%目录下,如:C:\Documents and Settings\Administrator\。
4. 配置并编译
   打开console窗口,并设置VC的环境变量,然后运行如下的配置命令:
   configure -debug-and-release -no-stl -no-sql-sqlite -qt-libjpeg -qt-gif -platform win32-msvc2005
   成功后就可以通过运行nmake来完成源代码的完全编译了。
   上面的命令行中,根据你的要求可以自行调整,一般而言为了成功编译必须要包含的命令
   选项是-debug-and-release和-platform win32-msvc2005两个,其他可以选择。


Feedback

# re: Qt4.2.3编译记录  回复  更多评论   

2007-06-21 17:37 by pass86
在学习列表中,支持。

# re: Qt4.2.3编译记录  回复  更多评论   

2007-11-14 16:16 by lanjian
您好我在VS2005下面nmake 的时候出错
VC/bin/cl.exe返回代码0xc0000135
vc/bin/nmake.exe返回代码0x2
这个是什么错误?怎么解决呢?多谢

# re: Qt4.2.3编译记录  回复  更多评论   

2009-12-01 10:46 by test
妈妈的 看了无数篇文章 知道看到你的文章才能编译,其他人真是吃了狗屎

# re: Qt4.2.3编译记录  回复  更多评论   

2009-12-01 10:48 by test
妈妈的 看了无数篇文章 直到看到你的文章才能编译,其他人真是吃了狗屎

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理