操作系统: Windows 11 23H2
Vulkan 版本: 1.3.2.280.0
Visual Studio 版本: 2022
在VulkanSDK/Demos目录下存在一个demo solution,其中包含两个project, vkcube和vkcubepp,两个分别为C语言和C++写的示例程序, 但是直接编译这两个project时会编译失败,报了以下错误:
fatal error C1189: #error: To use volk, you need to define VK_NO_PROTOTYPES before including vulkan.h
根据提示这是由于两个project使用了volk库导致的,在使用volk库时,如果你include了vulkan.h, 必须在include声明之前define VK_NO_PROTOTYPES.
#define VK_NO_PROTOTYPES
#include <vulkan/vulkan.h>
#define VOLK_IMPLEMENTATION
#include "volk.h"
添加第一行的宏定义之后vkcube可以正常编译了,但是vkcubepp仍然报错:
vulkan_structs.hpp(67568,35): error C2589: '(': illegal token on right side of '::'
vulkan_structs.hpp(67568,30): error C2062: type 'unknown-type' unexpected
这是由于windows的系统头文件与C++标准库的头文件同时存在min这个函数, 因此发生了冲突,在cube.cpp里添加如下宏定义禁止min/max函数即可:
#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#define VULKAN_HPP_NO_EXCEPTIONS
#define VULKAN_HPP_TYPESAFE_CONVERSION
#define NOMINMAX
#define VK_NO_PROTOTYPES
#include <vulkan/vulkan.hpp>
#define VOLK_IMPLEMENTATION
#include "volk.h"
添加第5, 6行的宏定义之后再次编译即可.