首页 > 代码库 > 在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项

在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项

在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项

跳转至: 导航、 搜索

目录

  • 1C++编译问题
    • 1.1从idl生成.h/.cpp失败?
    • 1.2VS编译器版本
    • 1.3名字导出问题
    • 1.4找不到int64_t类型?
    • 1.5Windows上需要pthread-win32库以提供多线程支持
  • 2链接问题
    • 2.1mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "..\lib\QtWebKitd.dll"
    • 2.2LINK : fatal error LNK1181: cannot open input file ‘d:\qt-everywhere-opensource-src-4.8.4\lib\QtSqld4.lib‘
    • 2.3确认QtTestBrowser项目链接的不是Qt内部的WebKit lib
    • 2.4注意Windows与Linux对lib的链接依赖差别
    • 2.5Windows上没有xlib plugins,删除对应引用
    • 2.6debug\WebCored.lib : fatal error LNK1106: invalid file or disk full: cannot seek to 0x40EB50B4

C++编译问题

前提条件!!

需要安装GNUWin32软件(主要是Flex及Bison、gperf)及pthread-win32。

从idl生成.h/.cpp失败?

  1. 确保不要使用cygin里的perl和bison等程序,使用外部的Perl(我用的是5.16)和GnuWin32里的bison

VS编译器版本

  1. 请使用VS2010以上,不要再用VS2008(VS2005更加过时了),否则最终链接lib时会遇到错误:

名字导出问题

  1. QtWebKit.dll其实由下面几个子项目构成:
    1. WTF
    2. JavaScriptCore
    3. WebCore
    4. WebKit(2)
    5. QtWebKit(API)
    请为这几个项目一律添加下列预定义宏:BUILDING_WTF、BUILDING_JavaScriptCore、BUILDING_WebCore、BUILDING_WEBKIT
    同时需要修改Source\JavaScriptCore\config.h,确保#include "JSExportMacros.h"

找不到int64_t类型?

  1. 在对应的cpp(或直接修改config.h)中添加://需要把-I"..\..\..\Source\JavaScriptCore\os-win32"加入项目包含路径
    #if OS(WINDOWS) && COMPILER(MSVC)
    #include "stdint.h"
    #endif

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‘

  1. 遇到这种问题比较容易解决,说明WebKit代码需要链接QtSqld库,打开Qt的projects.sln,选择对应模块,Build即可

确认QtTestBrowser项目链接的不是Qt内部的WebKit lib

  1. 检查对应的Makefile或VS的linker input设置
  2. 注意,WebKit官方压缩包附带的是QtTestBrowser,而Qt本身附带的是demos/browser和fancy browser

注意Windows与Linux对lib的链接依赖差别

Windows上编译QtWebKit时,删除对fontconfig.lib、qxlibd.lib的链接依赖

Windows上没有xlib plugins,删除对应引用

  1. 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)
  2. 修改Tools\QtTestBrowser\main.cpp,删除Q_IMPORT_PLUGIN(xlib)行

debug\WebCored.lib : fatal error LNK1106: invalid file or disk full: cannot seek to 0x40EB50B4

  1. 某些情况下,删除*.lib、*.dll、*.exp、*.pdb,重新Build,可以成功
  2. 实在不行,说明必须使用VS2010+,VS2008-已经过时了 

在Windows Qt-4.8.x平台上编译Qt-5.0+ WebKit(即qtwebkit-2.3.x) Debug版注意事项