在vulkan (/usr/include/vulkan/*)中声明的一些符号没有在vulkan库(libvulkan.so.1.1.82)中定义。(我在Ubuntu18.04上使用标准的vulkan软件包,libvulkan1和libvulkan-dev)
例如:
vkCreateInstance在vulkan头中声明,并在vulkan库中定义。vkCmdBeginConditionalRenderingEXT是在vulkan头中声明的,但是不是在vulkan库中定义的。为什么会这样呢?
$ cat > t.cc
#include <vulkan/vulkan.h>
int main() {
{ constexpr auto x = vkCmdBeginConditionalRenderingEXT; (void)x; }
}
^D
$ g++ t.cc -lvulkan
/tmp/cczuSwiY.o: In function `main':
t.cc:(.text+0x7): undefined reference to `vkCmdBeginConditionalRenderingEXT'
collect2: error: ld returned 1 exit status这些缺失命令的完整列表是: vkCmdBeginConditionalRenderingEXT、vkCmdBeginDebugUtilsLabelEXT、vkCmdBeginRenderPass2KHR、vkCmdDebugMarkerBeginEXT、vkCmdDebugMarkerEndEXT、vkCmdDebugMarkerInsertEXT、vkCmdDrawIndexedIndirectCountAMD、vkCmdDrawIndexedIndirectCountKHR、vkCmdDrawIndirectCountAMD、vkCmdDrawIndirectCountKHR、vkCmdEndConditionalRenderingEXT、vkCmdEndDebugUtilsLabelEXT、vkCmdEndRenderPass2KHR、vkCmdInsertDebugUtilsLabelEXT、vkCmdNextSubpass2KHR、vkCmdProcessCommandsNVX、vkCmdInsertDebugUtilsLabelEXT、vkCmdInsertDebugUtilsLabelEXT、vkCmdNextSubpass2KHR、vkCmdProcessCommandsNVX、vkCmdInsertDebugUtilsLabelEXT、en0 20#、、#en38、39号、en42、43#、44#en0、#en0、46#en59、48#en59、48#en59、58#en59、58#en0、58#en0、58#en0、55、、#en38、#en39、、#en41、#en42、#43、#、en0、46#en59、48#en0、48##en59、58##en0#、58#en0#、58、#、#en38、39#、en0 42、43#、、en0、46#en59、48#en0、vkQueueEndDebugUtilsLabelEXT,vkQueueInsertDebugUtilsLabelEXT,vkRegisterDeviceEventEXT,vkRegisterDisplayEventEXT,vkRegisterObjectsNVX,vkReleaseDisplayEXT,vkSetDebugUtilsObjectNameEXT,vkSetDebugUtilsObjectTagEXT,vkSetHdrMetadataEXT,vkSubmitDebugUtilsMessageEXT,vkUnregisterObjectsNVX.
发布于 2018-11-25 00:42:02
Windows、Linux、Android和MacOS上的加载程序库将导出所有核心Vulkan和所有适当的窗口系统接口(WSI)扩展。
这意味着它可能不导出非核心的、“适当的”-WSI命令。
https://stackoverflow.com/questions/53463410
复制相似问题