当包含不兼容的nvml库时,nvidia-smi失败

时间:2018-02-19 09:38:45

标签: cuda dynamic-linking

无意中,在Linux环境中的库路径中添加了一个不兼容的nvml库。在我尝试查询nvidia-smi时,在该设置中,它会发出以下错误

Failed to initialize NVML: Driver/library version mismatch

当我从库路径中删除该不兼容的库并再次查询nvidia-smi时,查询会成功运行并且输出会按预期显示。

然而,当我通过为ldd输入nvidia-smi来查看从属库时,它并未显示该过程依赖于nvml库。

$>ldd /usr/bin/nvidia-smi 
    linux-vdso.so.1 =>  (0x00007fffa84db000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f58ba044000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f58b9e3f000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f58b9a7e000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f58b9876000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f58ba27d000)

如果它不依赖于nvml库,为什么在存在不兼容的nvml库时会发出错误?

1 个答案:

答案 0 :(得分:6)

ldd提供了动态链接到应用程序的库的应用程序依赖项列表。

据推测,此应用程序使用(共享)库的runtime loading(例如,strace nvidia-smi 2>&1 |grep ml

在运行时加载库时,没有必要将应用程序显式链接到库,并且库不会在ldd输出中显示为依赖项(如果它未在应用程序构建时显式链接)时间)。