0

我正在尝试构建Qt3D,因为它似乎不再默认随 Qt6 一起发布

我刚刚在 ubuntu 上完成了安装,没有出现重大问题(如果安装说明可以提到需要vulkan sdk会有所帮助,这并不明显,但在安装 SDK 后编译成功完成)。我使用 Qt Creator 来构建库。

我试图在 Windows 上做同样的事情,我按照上面的安装说明安装了 perl 和 vulkan。打开 qt3d.pro 项目并尝试在发布模式下构建它后,我被卡在需要 vulkan 的地方

C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp: In lambda function:
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:54:34: error: invalid use of incomplete type 'class QVulkanInstance'
         QVulkanInstance* v = new QVulkanInstance;
                                  ^~~~~~~~~~~~~~~
In file included from C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:40:
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance_p.h:60:7: note: forward declaration of 'class QVulkanInstance'
 class QVulkanInstance;
       ^~~~~~~~~~~~~~~
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:60:59: error: invalid use of incomplete type 'class QByteArray'
         if (debug_mode || qgetenv("QT3D_VULKAN_VALIDATION").toInt())
                                                           ^
In file included from C:/Qt/6.0.1/mingw81_64/include/QtGui/qtguiglobal.h:43,
                 from C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance_p.h:54,
                 from C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:40:
C:/Qt/6.0.1/mingw81_64/include/QtCore/qglobal.h:1259:7: note: forward declaration of 'class QByteArray'
 class QByteArray;
       ^~~~~~~~~~
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:61:14: error: invalid use of incomplete type 'class QVulkanInstance'
             v->setLayers({ "VK_LAYER_KHRONOS_validation" });
              ^~
In file included from C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:40:
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance_p.h:60:7: note: forward declaration of 'class QVulkanInstance'
 class QVulkanInstance;
       ^~~~~~~~~~~~~~~
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:63:15: error: invalid use of incomplete type 'class QVulkanInstance'
         if (!v->create())
               ^~
In file included from C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance.cpp:40:
C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\Src\src\render\surfaces\vulkaninstance_p.h:60:7: note: forward declaration of 'class QVulkanInstance'
 class QVulkanInstance;
       ^~~~~~~~~~~~~~~
jom: C:\Qt\AdditionalLibraries\Qt\qt3d-6.0.1\build-qt3d-Desktop_Qt_6_0_1_MinGW_64_bit-Release\src\render\Makefile.Release [.obj\release\vulkaninstance.o] Error 1

第一条错误消息error: invalid use of incomplete type 'class QVulkanInstance'向我表明找不到该库。我检查了我的环境变量,即System variables. vulkan SDK 安装程序创建了两个环境变量,名称VULKAN_SDKVK_SDK_PATHvulkan 入门指南中所述,它们都指向安装文件夹的根目录,即C:\Program Files\VulkanSDK\1.2.162.1. 我检查了我的Path变量,并且还添加了 bin 文件夹C:\Program Files\VulkanSDK\1.2.162.1\bin。即使有这些条目可用,我仍然会收到与上述相同的错误消息。同时添加C:\Program Files\VulkanSDK\1.2.162.1\IncludeC:\Program Files\VulkanSDK\1.2.162.1\LibPath不会改变结果。我应该在这里说我运行了一些运行良好的 vulkan 示例(例如,vkcube.exe)。

我正在 Qt Creator(使用 Qt 6.0.1 版)中构建库(或者更确切地说是尝试构建),并且在尝试构建之前检查了上述所有环境变量在构建期间是否可用(通过检查这些条目是否存在于Projects->Build Environment->Use System Environment->Details) .

我还尝试将外部库添加到 qt3d.pro 文件,但我认为不应修改构建脚本,并且错误与我的构建环境有关。

错误可能已经蔓延的任何建议?

4

2 回答 2

1

我应该提到,我在 Windows 上使用默认套件 MinGW ...切换到 MSVC 似乎已经奏效,我现在能够构建库,但不确定为什么 mingw 不起作用。也许是一些权限问题?无论如何,这个解决方案对我来说是可以接受的,把这个答案留在这里,以防将来有人偶然发现这个问题。

于 2021-02-23T20:46:56.620 回答
0

解决方案:

将 vulkan 文件夹从 Vulkan 安装路径 (C:\Dev\Vulkan\1.2.170.0\Include\vulkan) 复制到 Qt 包含路径 (C:\Dev\Qt\6.0.3\mingw81_64\include)

于 2021-04-14T07:11:57.957 回答