使用 vkSetDebugUtilsObjectNameEXT() 时无法解析的外部符号?[复制]

Unresolved external symbol when using vkSetDebugUtilsObjectNameEXT()? [duplicate]

提问人:StarFox 提问时间:10/11/2023 最后编辑:genpfaultStarFox 更新时间:10/11/2023 访问量:98

问:

好吧,我已经更改了一些旧函数,并且在关闭 Validationlayers 后告诉我我不删除/清除资源,现在尝试设置 DebugUtilsObjectName 函数以更容易找到资源;

void DebugUtilsObjectName(uint64_t objectHandle, const char* pObjectName, VkDevice device, VkObjectType objectType) {
    VkDebugUtilsObjectNameInfoEXT DebugUtilsObjectNameInfo{};
    DebugUtilsObjectNameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
    DebugUtilsObjectNameInfo.pNext = nullptr;
    DebugUtilsObjectNameInfo.objectType = objectType;
    DebugUtilsObjectNameInfo.objectHandle = objectHandle;
    DebugUtilsObjectNameInfo.pObjectName = pObjectName;

    vkSetDebugUtilsObjectNameEXT(device, &DebugUtilsObjectNameInfo);
}

我最终得到:

Linker error i end up with:

我试着通读了它的文档,但找不到任何可能对我有帮助的突出内容

C++ 链接器错误 vulkan 未解决的外部

评论

1赞 Osyotr 10/11/2023
这是一个扩展,因此必须在运行时加载此函数

答:

0赞 Erel 10/11/2023 #1

Vulkan 标头仅公开扩展函数的原型,前提是您没有添加 .它不提供实际功能。这是为了允许您覆盖诸如 or 之类的内容(在这种情况下,您还需要手动加载核心函数)。VK_NO_PROTOTYPESVK_DEFINE_NON_DISPATCHABLE_HANDLEVK_USE_64_BIT_PTR_DEFINES

您必须使用例如函数指针或设备功能指针手动加载扩展函数指针(有关差异,请参阅此帖子):vkGetInstanceProcAddrvkGetDeviceProcAddr

auto* pfn = reinterpret_cast<PFN_vkSetDebugUtilsObjectNameEXT>(vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT"));

您也可以从中提取具有要加载或考虑 VOLK 的符号列表的东西(我认为?vulkan.hpp