在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项
C++编译问题
前提条件!!
需要安装GNUWin32软件(主要是Flex及Bison、gperf)及pthread-win32。
从idl生成.h/.cpp失败?
- 确保不要使用cygin里的perl和bison等程序,使用外部的Perl(我用的是5.16)和GnuWin32里的bison
VS编译器版本
- 请使用VS2010以上,不要再用VS2008(VS2005更加过时了),否则最终链接lib时会遇到错误:
名字导出问题
- QtWebKit.dll其实由下面几个子项目构成:
- WTF
- JavaScriptCore
- WebCore
- WebKit(2)
- QtWebKit(API)
- 请为这几个项目一律添加下列预定义宏:BUILDING_WTF、BUILDING_JavaScriptCore、BUILDING_WebCore、BUILDING_WEBKIT
- 同时需要修改Source\JavaScriptCore\config.h,确保#include "JSExportMacros.h"
找不到int64_t类型?
- 在对应的cpp(或直接修改config.h)中添加://需要把-I"..\..\..\Source\JavaScriptCore\os-win32"加入项目包含路径
- #if OS(WINDOWS) && COMPILER(MSVC)
- #include "stdint.h"
- #endif
- #if OS(WINDOWS) && COMPILER(MSVC)
Windows上需要pthread-win32库以提供多线程支持
直接使用预编译好的pthreads-win32-2.8.0即可
链接问题
mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "..\lib\QtWebKitd.dll"
杀毒软件的问题,删除dll,重新Build
LINK : fatal error LNK1181: cannot open input file ‘d:\qt-everywhere-opensource-src-4.8.4\lib\QtSqld4.lib‘
- 遇到这种问题比较容易解决,说明WebKit代码需要链接QtSqld库,打开Qt的projects.sln,选择对应模块,Build即可
确认QtTestBrowser项目链接的不是Qt内部的WebKit lib
- 检查对应的Makefile或VS的linker input设置
- 注意,WebKit官方压缩包附带的是QtTestBrowser,而Qt本身附带的是demos/browser和fancy browser
注意Windows与Linux对lib的链接依赖差别
Windows上编译QtWebKit时,删除对fontconfig.lib、qxlibd.lib的链接依赖
Windows上没有xlib plugins,删除对应引用
- error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_xlib(void)" (?qt_plugin_instance_xlib@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticxlibPluginInstance::StaticxlibPluginInstance(void)" (??0StaticxlibPluginInstance@@QAE@XZ)
- 修改Tools\QtTestBrowser\main.cpp,删除Q_IMPORT_PLUGIN(xlib)行
debug\WebCored.lib : fatal error LNK1106: invalid file or disk full: cannot seek to 0x40EB50B4
- 某些情况下,删除*.lib、*.dll、*.exp、*.pdb,重新Build,可以成功
- 实在不行,说明必须使用VS2010+,VS2008-已经过时了
在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项