Visual Studio 的 /experimental:module 与 Vulkan 的 core.h 冲突导致语法错误 - 编译失败
Visual Studio's /experimental:module conflicting with Vulkan's core.h causing syntax error - compilation failure
一点转发消息:由于我能够使用的标签数量有限,所以我选择了标签 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
库编译和/或 link 由于上述冲突,它失败了。
vulkan_core.h
出现了一个重大故障,因为他们定义的一些结构有一个名为 module
的成员,这可以从他们的规范 sheet 中看出: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;
其中包含一个名为 module
的 VkShaderModule
,这与 Visual Studio's
/experimental:module
编译器标志冲突,因为这使 module
成为 keyword
在 C++17
和/或 C++20
语言中。
此功能在 Visual Studio 2017
和 Visual Studio 2019
中可用,我不是 100% 确定,但我认为它在 Visual Studio 2015
中也可用,因为我认为这是 Microsoft 推出的它。
这里有一个简短的主题、主题或讨论:
https://developercommunity.visualstudio.com/content/problem/556929/enabling-modules-causes-syntax-error-in-vulkan-cor.html 他们提到正在对此进行调查,但我没有看到更多关于这个主题的信息。
我什至想先在这里搜索一下,看看有没有提到它,但我的搜索结果一无所获。所以我决定 post 这个问题更多的是作为对其他用户的认识和参考,因为我认为这是一个需要解决的重要问题,因为 Vulkan
正在成为一个流行的 3D 图形和计算 API 工具来使用。
所以对于我关于这个问题的问题:
- 除了提到的内容之外,还有其他跟进吗?
- 除了
disabling
Visual Studio
编译器功能之外,还有其他解决方法吗?
- 负责
The Khronos Group
或 LunarG
负责 Vulkan
库的责任在哪里,Microsoft
因为他们正在添加这个他们 compiler
的功能,或者这会涉及到实际的 C++ Standard
?
- 还有;
module
是否会被视为标准 C++
语言中的实际 key word
,或者这将是 Microsoft 特定的东西?
gcc
或 Clang
等其他编译器是否受此影响?
我问了这一系列问题,以获得整个社区的总体反馈。
我还希望看到其他人对此做出贡献 post 添加 link 与此特定主题相关的其他讨论、计划和可能的解决方案,使其成为参考C++ 社区所有读者的页面!
- 除了提到的内容之外,还有其他跟进吗?
vulkan 的 public 问题跟踪器有一个主题:https://github.com/KhronosGroup/Vulkan-Docs/issues/568
解决方案是 module
成为上下文关键字,这样编译器就不会给出错误。
- 除了禁用 Visual Studio 编译器功能外,还有其他解决方法吗?
您可以编辑 vulkan header,成员字段的名称对于正确操作无关紧要。
- 照顾这个的责任落到哪里去了。
Microsoft 需要修复他们的编译器。
- 还有;模块是否会被视为标准中 C++ 语言中的实际关键字,或者这将是 Microsoft 特定的东西?
这将是一个上下文关键字。
- gcc 或 Clang 等其他编译器是否受此影响?
如果他们正确实施上下文关键字,那么他们将不会受到影响。
一点转发消息:由于我能够使用的标签数量有限,所以我选择了标签 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
库编译和/或 link 由于上述冲突,它失败了。
vulkan_core.h
出现了一个重大故障,因为他们定义的一些结构有一个名为 module
的成员,这可以从他们的规范 sheet 中看出: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;
其中包含一个名为 module
的 VkShaderModule
,这与 Visual Studio's
/experimental:module
编译器标志冲突,因为这使 module
成为 keyword
在 C++17
和/或 C++20
语言中。
此功能在 Visual Studio 2017
和 Visual Studio 2019
中可用,我不是 100% 确定,但我认为它在 Visual Studio 2015
中也可用,因为我认为这是 Microsoft 推出的它。
这里有一个简短的主题、主题或讨论: https://developercommunity.visualstudio.com/content/problem/556929/enabling-modules-causes-syntax-error-in-vulkan-cor.html 他们提到正在对此进行调查,但我没有看到更多关于这个主题的信息。
我什至想先在这里搜索一下,看看有没有提到它,但我的搜索结果一无所获。所以我决定 post 这个问题更多的是作为对其他用户的认识和参考,因为我认为这是一个需要解决的重要问题,因为 Vulkan
正在成为一个流行的 3D 图形和计算 API 工具来使用。
所以对于我关于这个问题的问题:
- 除了提到的内容之外,还有其他跟进吗?
- 除了
disabling
Visual Studio
编译器功能之外,还有其他解决方法吗? - 负责
The Khronos Group
或LunarG
负责Vulkan
库的责任在哪里,Microsoft
因为他们正在添加这个他们compiler
的功能,或者这会涉及到实际的C++ Standard
? - 还有;
module
是否会被视为标准C++
语言中的实际key word
,或者这将是 Microsoft 特定的东西? gcc
或Clang
等其他编译器是否受此影响?
我问了这一系列问题,以获得整个社区的总体反馈。
我还希望看到其他人对此做出贡献 post 添加 link 与此特定主题相关的其他讨论、计划和可能的解决方案,使其成为参考C++ 社区所有读者的页面!
- 除了提到的内容之外,还有其他跟进吗?
vulkan 的 public 问题跟踪器有一个主题:https://github.com/KhronosGroup/Vulkan-Docs/issues/568
解决方案是 module
成为上下文关键字,这样编译器就不会给出错误。
- 除了禁用 Visual Studio 编译器功能外,还有其他解决方法吗?
您可以编辑 vulkan header,成员字段的名称对于正确操作无关紧要。
- 照顾这个的责任落到哪里去了。
Microsoft 需要修复他们的编译器。
- 还有;模块是否会被视为标准中 C++ 语言中的实际关键字,或者这将是 Microsoft 特定的东西?
这将是一个上下文关键字。
- gcc 或 Clang 等其他编译器是否受此影响?
如果他们正确实施上下文关键字,那么他们将不会受到影响。