Qt4.8.6在官网上只可以下载到32位的,如果实际中需要64位的需要把源码手动编译成64位的。
1. 把下载到的源码qt-everywhere-opensource-src-4.8.6.zip,解压到:C:\Qt\4.8.6_x64下面
2. 找到VS2010下面的64位的命令行提示工具
输入两行命令:
set QTDIR=C:\Qt\4.8.6_x64
set QMAKESPEC=win32-msvc2010
3. 修改Qt4.8.6源码中的一些问题
第一处修改:
打开文件C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
中的327行
由原来的:
改为:
第二处修改:
C:\Qt\4.8.6_x64\mkspecs\win32-msvc2010\qmake.conf
第60和61行:
原来的:
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
修改为:
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO
QMAKE_LFLAGS_DEBUG = /DEBUG /INCREMENTAL:NO
4. 进入之前的VS2010 x64的命令行工具生成VS2010工程
输入命令:
configure -opensource -nomake demos -nomake examples -platform win32-msvc2010 -webkit
提示:Do you accept the terms of the license? 输入
y
开始生成VS2010项目工程,大概需要20分钟。。。
生成完成。
5. 编译Qt4.8.6
在C:\Qt\4.8.6_x64下面使用VS2010打开生成的projects.sln
6. 错误调试
经过漫长的编译过程,出现了两个链接错误和一些定义错误;
6.1.链接错误:
错误 9684 error LNK2019: 无法解析的外部符号 _HBeginPaint,该符号在函数 "private: static struct HDC__ * __cdecl WebCore::PluginView::hookedBeginPaint(struct HWND__ *,struct tagPAINTSTRUCT *)" (?hookedBeginPaint@PluginView@WebCore@@CAPEAUHDC__@@PEAUHWND__@@PEAUtagPAINTSTRUCT@@@Z) 中被引用 C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
错误 9685 error LNK2019: 无法解析的外部符号 _HEndPaint,该符号在函数 "private: static int __cdecl WebCore::PluginView::hookedEndPaint(struct HWND__ *,struct tagPAINTSTRUCT const *)" (?hookedEndPaint@PluginView@WebCore@@CAHPEAUHWND__@@PEBUtagPAINTSTRUCT@@@Z) 中被引用 C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
链接错误位置:
在文件C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebCore\plugins\win\PluginViewWin.cpp
的180行和209行的位置
没有找到对应得链接符号。
在相同的目录C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebCore\plugins\win下面找到文件:PaintHooks.asm。通过文本工具打开后可以看到相应的定义:
修改方案:
a. 把这个文件PaintHooks.asm添加到项目webcore中
在项目中可以看到这个文件已经添加到项目中了。
b. 修改配置属性,鼠标右键->生成自定义
勾选masm(.targets,.props)选项,点击【确定】
c. 修改PaintHooks.asm属性
在常规->项类型->Mcrosoft Macro Assembler
这样修改就可以解决链接问题了。
6.2. 没有找到TESTS_SOURCE_DIR定义问题
然后查看其定义的位置实在文件:
C:\Qt\4.8.6_x64\src\3rdparty\webkit\Source\WebKit\qt\tests\util.h
中。
在文件中添加一行代码,重新定义即可
#define TESTS_SOURCE_DIR "C:/Qt/4.8.6_x64/src/3rdparty/webkit/Source/WebKit/qt/tests/"
这样就可以找到定义了。
aaa