这是我的一个小代码片段。问题是我想加载“createDebugUtilsMessengerEXT”函数。但我收到链接错误:
LNK2001:无法解析的外部符号“class vk::DispatchLoaderDynamic vk::defaultDispatchLoaderDynamic”。
我到底做错了什么?
另外,我根据这个例子
编写了这段代码#include <vulkan.hpp>
#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#ifdef VALIDATION_LAYERS
VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageSeverityFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT* pCallBackData,
void* pUserData)
{
std::cerr << "Validation: " << pCallBackData->pMessage << std::endl;
return VK_FALSE;
}
#endif
vk::Instance createInstance()
{
...
#ifdef VALIDATION_LAYERS
debugMessengerCreateInfo_ = vk::DebugUtilsMessengerCreateInfoEXT({},
vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError,
vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance,
debugCallback);
#endif
vk::Instance instance = vk::createInstance(instanceCreateInfo);
#ifdef VALIDATION_LAYERS
VULKAN_HPP_DEFAULT_DISPATCHER.init(instance);
debugMessenger_ = instance.createDebugUtilsMessengerEXT(debugMessengerCreateInfo_);
#endif
您需要
#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC
之前加载 Vulkan.hpp。来自vulkan.hpp:
要使用
作为默认调度程序(意味着:您不需要将其显式添加到每个函数调用中),您需要vk::DispatchLoaderDynamic
,并在源代码中使用宏#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
一次为默认调度程序提供存储。然后就可以通过宏来使用了VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
VULKAN_HPP_DEFAULT_DISPATCHER