Qt 5.7 + QtWebKit 编译

Qt 5.7 已经不包含 QtWebKit 的预编译库了,需要使用的话得手动编译。
其实我就是想给 zeal (https://zealdocs.org/) 换上 Qt 5.7 测试 Qt 文档中的字体问题 (后来发现是没安装 Droid Sans Mono 造成的,停不下来了,编译已经开始了)。又不想用新的 QtWebEngine (因为是 MSVC only),同时说不定使用了 QtWebKit 需要移植。所以就开始编译一个 MinGW 版本的 QtWebKit 给自己用。

真是给自己挖了个大坑。

第一次尝试:单独编译 QtWebKit

需要指定 SQLITE3SRCDIRQTDIR
使用 Tools\Script\build-webkit --qt 进行编译
但出现两个问题:

  • 频繁出现的 icu 引用路径缺失 (之后才知道原来是需要外部 icu)
  • JSChar 与 UChar 定义不匹配 (char 与 wchar_t)

因此开始尝试使用 无 icu 依赖的编译方式
找到的 arch 的去除 icu 依赖的补丁,但补丁的应用非常麻烦,Windows 上的 patch (或单纯来讲 patch) 根本不会用。因此手动应用了补丁,然并卵,系统提示没有 Unicode 实现。

在官方的编译指南中 (https://trac.webkit.org/wiki/BuildingQtOnWindows) 发现提到了,编译时必须依赖 icu。但 Qt 5.7 默认去除了 QtWebKit 模块,因此 icu 也变成了可选 (当然了,意思就是不依赖了。原来之前带着 icu 就是因为 QtWebKit 呀) 。并且要编译 QtWebKit,整个 Qt 也需要启用 icu 编译选项。

所以要开始第二次尝试了。

第二次尝试:编译 Qt

编译 icu

当然了,需要首先编译 icu.

参照官方说明 (http://wiki.qt.io/Compiling-ICU-with-MinGW),使用:

./runConfigureICU MinGW prefix=$PWD/../dist

然后

make && make install

就好。

会在此 dist 文件夹内得到 include 和 lib 两个文件夹的内容。相信懂了。

需要注意的是,避免环境混用。我使用 cygwin 的 sh ,(链接 MinGW 的库时) 就出了问题。同时 Git 自带的 MSYS 环境也不能随便用,因为 bitness 的差异,32位 与 64位 的 MSYS 环境是冲突的。

因此另外安装个 MSYS 环境就好,注意 bitness 与 MinGW 编译器的一致。开始编译前检查 PATH 配置,重新设置最好,避免出错浪费时间。

编译 Qt

Qt 这么大的项目,能用 configure 通过简单配置即可编译,已经很不容易了。

参考一篇关于静态编译的说明 (http://blog.csdn.net/wsj18808050/article/details/42301561) 进行配置。

有几个需要注意的地方:
– QtWebKit 需要动态编译 (本来就没准备静态编译)
– 不要使用 -opengl dynamic 或者 angle 选项,而仅使用 -opengl desktop,除非你手头刚好安装了 DirectX 的 SDK。
– 启用 openSSL
– 启用 icu

最终使用的配置是:(路径仅作参考)

configure.bat -opensource -confirm-license -platform win32-g++ -mp -debug-and-release -prefix C:\Qt\5.7.0-ICU\ -qt-freetype -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I C:\OpenSSL\Win32\include -L C:\OpenSSL\Win32\lib -icu -I C:\icu\dist\include -L C:\icu\dist\lib -no-compile-examples -nomake tests -nomake examples -no-accessibility

一切正常就可以开始 make 了。到编译完成总共花了约 40 个小时,其中 WebKit 本身 30+ 小时。呵呵。

One thought on “Qt 5.7 + QtWebKit 编译

Leave a reply to Ricky Wong Cancel reply