无意中,在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
库时会发出错误?
答案 0 :(得分:6)
ldd
提供了动态链接到应用程序的库的应用程序依赖项列表。
据推测,此应用程序使用(共享)库的runtime loading(例如,strace nvidia-smi 2>&1 |grep ml
)
在运行时加载库时,没有必要将应用程序显式链接到库,并且库不会在ldd
输出中显示为依赖项(如果它未在应用程序构建时显式链接)时间)。