操作系統: 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行的宏定義之后再次編譯即可.