我的所有Vulkan SDK路径都来自.profile,并在回显时提供以下结果:
我可以枚举所有图层,应用程序编译没有问题。但是,当我运行它时,我从调试报告回调中收到以下错误消息:
我使用的是带有387.42.05驱动程序的GTX 1060的Ubuntu 17.10,它支持Vulkan 1.1。
使用LD_DEBUG = libs运行应用程序会显示2个错误:
/lib/x86_64-linux-gnu/libpthread.so.0:错误:符号查找错误:未定义符号:pthread_setname_np,版本GLIBC_2.2.5(致命)
/home/jesta88/Vulkan/VulkanSDK/1.1.70.1/x86_64/lib/libVkLayer_parameter_validation.so:错误:符号查找错误:未定义符号:vkNegotiateLoaderLayerInterfaceVersion(致命)
我不知道如何解决这些错误。
答案 0 :(得分:1)
我无法完全解释第一个错误,尽管我可以重现它。它之前是
calling init: /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0
所以我怀疑nvidia驱动程序正在探测符号而无法找到它。虽然这被标记为"致命"但它并非真的。
对于第二个错误,我也可以看到。我通过运行SDK中的build_examples.sh
脚本来复制它。然后:
cd examples/build
LD_DEBUG=libs ./cube --validate -c 300 2> log
该应用运行良好。
为了说服自己验证层已加载并正常工作,我通过注释掉对vkDestroyDescriptorPool
的调用(cube.c中的第2252行)创建了验证错误,并获得了预期的验证错误。
在这种情况下,我认为Vulkan加载程序正在尝试查找驱动程序中的vkNegotiateLoaderLayerInterfaceVersion
符号并且无法找到它。这不是致命的情况,因为驱动程序导出此符号是可选的。如果加载器没有找到符号,则它假定加载器和驱动程序之间的特定协议。如果符号确实存在,则加载程序调用它以获取有关驱动程序支持的加载程序< - > ICD接口的其他信息。
可以在此document中找到更多详细信息。
简而言之,我不认为这些是实际问题。
编辑:当加载程序尝试加载图层而不是ICD(驱动程序)时,vkNegotiateLoaderLayerInterfaceVersion
问题确实发生,但仍然适用相同的解释。
我仍然无法解释您没有找到图层的消息。
我建议设置VK_LOADER_DEBUG=all
以获取有关Vulkan加载程序在查找图层时正在执行的操作的详细消息。
另外,尝试运行我上面概述的多维数据集演示,看看该应用是否正常运行。