Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212
Posted
技术标签:
【中文标题】Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212【英文标题】:Private Headers issue compiling QtWebKit 5.212 against Qt 5.10.1 【发布时间】:2018-09-21 18:03:19 【问题描述】:在 Windows 10、Visual Studio 2015 上,我正在针对 Qt 5.10.1 构建 QtWebKit (5.212),但在构建的配置部分遇到了错误。
这是我使用的命令行:
perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v
这是错误:
-- Performing Test Qt5Gui_PRIVATE_HEADER_FOUND
-- Performing Test Qt5Gui_PRIVATE_HEADER_FOUND - Failed
CMake Error at Source/cmake/OptionsQt.cmake:75 (message):
Header private/qhexstring_p.h is not found. Please make sure that:
1. Private headers of Qt5Gui are installed
2. Qt5Gui_PRIVATE_INCLUDE_DIRS is correctly defined in Qt5GuiConfig.cmake
Call Stack (most recent call first):
Source/cmake/OptionsQt.cmake:612 (CHECK_QT5_PRIVATE_INCLUDE_DIRS)
Source/cmake/WebKitCommon.cmake:50 (include)
CMakeLists.txt:139 (include)
-- Configuring incomplete, errors occurred!
它用来进行测试的私有头文件确实存在于 Qt5 包含目录中,正如人们所期望的那样,在这个位置:
E:\Qt-5.10.1\QtBin\include\QtGui\5.10.1\QtGui\private\qhexstring_p.h
Qt5GuiConfig.cmake 文件只存在于Qt 安装的E:\Qt-5.10.1\QtBin\lib\cmake\Qt5Gui
目录中(不在QtWebKit 源码安装中)。我不知道它是否以任何方式利用它。
我需要做什么才能使构建根据需要找到此目录?将 'include\QtGui\5.10.1\QtGui\' 添加到 INCLUDE env var 不起作用,但我不认为这是正确的解决方案。
以下是我的环境中与 Qt 目录相关的部分:
INCLUDE = ...;E:\Qt-5.10.1\QtBin\include;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\include
LIB = ...;E:\Qt-5.10.1\QtBin\lib;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\lib
PATH = E:\Qt-5.10.1\qt-everywhere-src-5.10.1\qtbase\bin;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\gnuwin32\bin;E:\Qt-5.10.1\QtBin\bin;...
QtBin
是我编译的 Qt 5.10.1 所在的目录。
qt-everywhere-src-5.10.1
是Qt 5.10.1源码包
提前感谢您的帮助。我在 Google 或 *** 中找不到任何答案。
【问题讨论】:
这是QT安装下Qt5GuiConfig.cmake
文件的正确位置:该文件描述的是QT,而不是QTWebKit。您可以尝试在该文件中查找变量Qt5Gui_PRIVATE_INCLUDE_DIRS
。
@Tsyvarev,谢谢。在将我的 Qt 构建与我可以访问的另一个构建进行比较后,我在该文件中的 Qt5Gui_PRIVATE_INCLUDE_DIRS 中添加了设置,但它对 QtWebKit 构建没有影响。从 QtWebKit 构建中引用该文件的内容是什么?它如何搜索该文件?它是如何利用它的?为什么我的构建不会自动设置此设置?
【参考方案1】:
根据the wiki,您应该尝试定义 CMAKE_PREFIX_PATH 以指向您的 Qt 安装
例如:
perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_PREFIX_PATH=c:\Qt\Qt5.6.0\5.6\msvc2015" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v
【讨论】:
【参考方案2】:使用 build-webkit 在 Windows 上构建失败,因为它无法找到此头文件 qhexstring_p.h 的位置。如何修复此错误,虽然不是标准方法,但它有效。
-
在您的前缀目录中找到文件 qhexstring_p.h,或者您的
首选 Qt 安装 SDK
转到此文件 Source\cmake\OptionsQt.cmake 并更改此文件
从此CHECK_QT5_PRIVATE_INCLUDE_DIRS(Gui private/qhexstring_p.h)
到下面这个
CHECK_QT5_PRIVATE_INCLUDE_DIRS(GUI C:/SDK/qt5-5.7.0-vs2015/qt5-x86-static-release/include/QtGui/5.7.0/QtGui/private/qhexstring_p.h)
此处的路径必须与您的 Qt 安装路径以及丢失文件所在的确切位置匹配。这确保了为 Qt 安装寻找私有导向器的测试成功。
然后在您的 Qt 安装目录中找到文件 Qt5GuiConfig.cmake 并将变量 Qt5Gui_PRIVATE_INCLUDE_DIRS 设置为您在下面找到私有头文件的位置。
set(Qt5Gui_PRIVATE_INCLUDE_DIRS "$_qt5Gui_install_prefix/include/QtGui/$Qt5Gui_VERSION_STRING/QtGui" "$_qt5Gui_install_prefix/include/QtCore/$Qt5Gui_VERSION_STRING/QtCore")
注意这个版本的 QtWebKit (5.212) 已知有几个 错误,所以最好选择那些稳定的。
保存并运行
perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_PREFIX_PATH=c:\Qt\Qt5.6.0\5.6\msvc2015" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v
如你所愿,应该可以按预期运行。
【讨论】:
以上是关于Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212的主要内容,如果未能解决你的问题,请参考以下文章
找不到模块映射文件'/Users/"my_flutter_project_path"/ios/Pods/Headers/Private/openssl_grpc/BoringSSL
qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码