一点转发消息:由于我能够使用的标签数量有限,所以我选择了标签 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
命名module
这与 Visual Studio's
冲突/experimental:module
编译器标志,因为这会启用 module
成为keyword
C++17
内和或C++20
语言。
此功能在 Visual Studio 2017
中可用和Visual Studio 2019
,我不是 100% 确定,但我认为它也可以在 Visual Studio 2015
中找到。我认为这是微软推出它的时候。
这里有一个关于此的简短主题、话题或讨论: https://developercommunity.visualstudio.com/content/problem/556929/enabling-modules-causes-syntax-error-in-vulkan-cor.html他们提到正在对此进行调查,但我在这个主题上没有看到比我所发现的更多的内容。
我什至尝试先在这里搜索一下是否有提及,但我的搜索结果毫无结果。因此,我决定发布这个问题,更多的是为了向其他用户提供更多的认识和引用,因为我认为这是一个需要解决的重要问题,因为 Vulkan
正在成为流行的 3D 图形和计算 API 工具。
关于这个问题我的问题是:
- 除了提到的内容之外,还有其他后续措施吗?
- 除了
disabling
之外还有其他解决办法吗?Visual Studio
编译器功能? - 照顾今年秋天的责任由谁承担:
The Khronos Group
或LunarG
谁负责Vulkan
图书馆,Microsoft
因为他们正在将此功能添加到他们的compiler
中或者这是否会涉及实际的C++ Standard
? - 还有;是
module
将被视为实际的key word
C++
内标准中的语言还是这是 Microsoft 特有的东西? - 是否有其他编译器,例如
gcc
或Clang
受此影响吗?
我提出这一系列问题是为了获得整个社区的总体反馈。
我还希望看到其他人为这篇文章做出贡献,添加与此特定主题相关的其他讨论、计划和可能的解决方案的链接,使其成为 C++ 社区所有读者的引用页面!
最佳答案
- 除了提到的内容之外,还有其他后续措施吗?
vulkan 的公共(public)问题跟踪器有一个主题:https://github.com/KhronosGroup/Vulkan-Docs/issues/568
解决方案是 module
将成为上下文关键字,这样编译器就不应该给出错误。
- 除了禁用 Visual Studio 编译器功能之外,还有其他解决办法吗?
您可以编辑 vulkan header ,成员字段的名称对于正确操作并不重要。
- 照顾这个的责任落在哪里。
微软需要修复他们的编译器。
- 还有;模块是否会被视为标准中 C++ 语言中的实际关键字,还是 Microsoft 特有的内容?
这将是一个上下文关键字。
- 其他编译器(例如 gcc 或 Clang)是否会受到此影响?
如果他们正确实现上下文关键字,那么他们就不会受到影响。
关于visual-studio - Visual Studio 的/实验 :module conflicting with Vulkan's core. h 导致语法错误 - 编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921783/