【问题标题】:Vulkan can't find layer libs on LinuxVulkan 在 Linux 上找不到层库
【发布时间】:2018-03-26 23:44:19
【问题描述】:

我所有的 Vulkan SDK 路径都来源于 .profile 并在回显时给出以下结果:

我可以枚举所有层并且应用程序编译没有问题。但是,当我运行它时,我从调试报告回调中收到以下错误消息:

我在 Ubuntu 17.10 上使用 GTX 1060 和 387.42.05 驱动程序,支持 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(致命)

我不知道如何处理这些错误。

【问题讨论】:

  • 你解决了吗,伙计?

标签: linux shared-libraries vulkan


【解决方案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中找到。

简而言之,我不认为这些是实际问题。

编辑:vkNegotiateLoaderLayerInterfaceVersion 问题确实发生在加载器尝试加载层而不是 ICD(驱动程序)时,但同样的解释仍然适用。

我仍然无法解释您收到的关于找不到图层的消息。

我建议设置 VK_LOADER_DEBUG=all 以获取有关 Vulkan 加载程序在查找层时正在做什么的详细消息。

另外,尝试运行我上面概述的多维数据集演示,以查看该应用程序是否正常运行。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2018-08-31
  • 2018-11-12
相关资源
最近更新 更多