visual-studio - Visual Studio 的/实验 :module conflicting with Vulkan's core. h 导致语法错误 - 编译失败

标签 visual-studio module c++17 vulkan c++20

一点转发消息:由于我能够使用的标签数量有限,所以我选择了标签 visual-studio尽管这至少涉及 Visual Studio 2015最小值不太值得关注,因为它更侧重于 Visual Studio 2017 的使用或Visual Studio 2019语言版本设置为 C++17C++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 GroupLunarG谁负责 Vulkan图书馆,Microsoft因为他们正在将此功能添加到他们的 compiler 中或者这是否会涉及实际的 C++ Standard
  • 还有;是 module将被视为实际的 key word C++内标准中的语言还是这是 Microsoft 特有的东西?
  • 是否有其他编译器,例如 gccClang受此影响吗?

我提出这一系列问题是为了获得整个社区的总体反馈。

我还希望看到其他人为这篇文章做出贡献,添加与此特定主题相关的其他讨论、计划和可能的解决方案的链接,使其成为 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/

相关文章:

visual-studio - 调试时 Visual Studio 关闭(安装更新 2 后)

python - 通过记事本在windows中执行python(F6 Exec命令__main__错误)

PHP 页面作为函数/进程模块

c++ - 如何使用类似 `std::basic_istream<std::byte>` 的东西

c - 使用/clr 支持编译的 C++-CLI 库调试 C 程序

visual-studio - 有没有一种方法可以有条件地运行Visual Studio生成后步骤

asp.net - Setting.settings 和 web.config 之间的区别?

perl - CPANM, "Couldn' t 查找模块或分发 Archive::zip"

c++ - std::condition_variable在阻塞之前是否真的解锁了给定的unique_lock对象?

c++ - 如何在 std::unordered_map<std::wstring, T> 中通过 std::wstring_view 类型的键查找?