一条前瞻性消息:由于我只能使用标签数量,因此我选择了标签visual-studio
,尽管这至少与Visual Studio 2015
最小值有关,这无关紧要因为这更着重于使用Visual Studio 2017
或Visual Studio 2019
语言版本的C++17
或C++20
。
我注意到Visual Studio
和Vulkan v1.1
的这些版本之间存在特殊的冲突
如果正在构建基于Vulkan
的应用程序,而它们恰巧打开了编译器标志:/std:c++latest
和/experimental:module
文档可从此处找到:
并尝试针对Vulkan
库进行编译和/或链接,该库由于上述冲突而失败。
vulkan_core.h
产生了重大故障,因为它们的某些已定义结构具有名为module
的成员,可以从其规格表中看到:khronos/vulkan/specs/1.1-extensions... >
在Vulkan's
VkPipelineShaderStageCreateInfo
结构中,它们的定义如下:
typedef struct VkPipelineShaderStageCreateInfo { VkStructureType sType; const void* pNext; VkPipelineShaderStageCreateFlags flags; VkShaderStageFlagBits stage; VkShaderModule module; const char* pName; const VkSpecializationInfo* pSpecializationInfo; } VkPipelineShaderStageCreateInfo;
包含名为VkShaderModule
的{{1}},并且与module
Visual Studio's
编译器标志冲突,因为这使/experimental:module
成为module
keyword
和/或C++17
语言。
此功能在C++20
和Visual Studio 2017
中可用,我不确定100%,但我认为Visual Studio 2019
中也可用,因为我认为这是Microsoft引入它时。
这里有一个简短的主题,主题或讨论: https://developercommunity.visualstudio.com/content/problem/556929/enabling-modules-causes-syntax-error-in-vulkan-cor.html他们提到正在对此进行调查,但是在这个主题上我所看到的并不比我发现的更多。
我什至试图先在这里搜索,看看是否有提及,但搜索结果毫无结果。因此,我决定将此问题发布为更多的了解和参考其他用户的方式,因为我认为这是一个重要的问题,因为Visual Studio 2015
已成为一种流行的3D图形和Compute API工具。
关于这个问题,我的问题是
Vulkan
编译器功能以外,是否还有其他解决方法?disabling
库的负责人Visual Studio
或The Khronos Group
,LunarG
,因为他们正在将此功能添加到他们的Vulkan
还是会涉及到实际的Microsoft
? compiler
视为标准中C++ Standard
语言中的实际module
还是这是Microsoft特定的事情?key word
或C++
之类的编译器吗?我问了一系列问题,以获取整个社区的总体反馈。
我还希望看到其他人对此帖子做出贡献,添加与此主题相关或相关的其他讨论,计划和可能的解决方案的链接,使之成为C ++社区所有读者的参考页!
答案 0 :(得分:4)
vulkan的公共发行跟踪器上有一个主题:https://github.com/KhronosGroup/Vulkan-Docs/issues/568
解决方案是module
将成为上下文关键字,因此编译器不应在其上给出错误。
您可以编辑vulkan标头,成员字段的名称与正确操作无关紧要。
Microsoft需要修复其编译器。
它将是上下文关键字。
如果它们正确实现了上下文关键字,那么它们将不会受到影响。