获取linux下共享库的真实路径



如果我只知道库名而不知道它的版本号,我怎么能得到linux中共享库的真实路径?

。, libc/libcudart/libcudnn/librt/libcurl/…

它们可能在标准目录(例如在ldconfig缓存中指定的目录)或其他目录(例如在LD_LIBRARY_PATH中指定的目录)

您可以使用linux工具或python或您自己的代码。

下面的bash脚本使用GNU实用程序刷新旧缓存并自己处理LD_LIBRARY_PATH:

$ { printf "%s" "$LD_LIBRARY_PATH" |
xargs -r -i{} -d':' find {} -mindepth 1 -maxdepth 1 -type f;
tmp=$(mktemp) ; trap 'rm "$tmp"' EXIT
ldconfig -C "$tmp"
ldconfig -C "$tmp" -v 2>&1 |
awk '
/^[^t]/{gsub(/:.*/,""); sec=$0; print; next; }
/t*[^ ]* -> /{ a[sec "/" $1]; a[sec "/" $3]; }
END{ for (i in a) print i }';
} | grep 'libc.so'
/usr/lib/libc.so.6
/usr/lib32/libc.so.6

如果您知道任何使用库的可执行文件,那么您可以使用ldd (/usr/bin/ldd),如下所示:

user@Inspiron:~/code/general$ ldd /usr/bin/python
linux-vdso.so.1 (0x00007ffe89326000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4b0b986000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4b0b963000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4b0b95d000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4b0b958000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4b0b809000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f4b0b7db000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4b0b7bd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4b0bb8e000)

最新更新