如果没有实现连接或使用ldd
,我怎么能找到的完整路径库? 有没有一个标准库可在Linux上? (POSIX也许?)
使用ldd
和grep
上是故意使用一个文件libGL.so.1
,它看起来像:
$ ldd /usr/bin/glxinfo | grep libGL
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f34ff796000)
给定一个库名状libGL.so.1
,我怎么能找到的完整路径/usr/lib/libGL.so.1
? 。 优选地接受用于查找的32位和64位库的选项。 如果没有图书馆这样做,做了程序中存在这样做呢? 类似find-library-path libGL.so.1
。 该locate libGL.so.1
命令不计。
我不想实际加载使用该库dlopen
如果从库执行代码或东西。
扩展在低级夜总会的回答,命令echo "$(ldconfig -p | grep libGL.so.1 | tr ' ' '\n' | grep /)"
将给你一个人的路径。
如果你不介意的实际加载库,并使用一些非标准的,但广泛使用的功能,要求dladdr
从库中的任何符号将返回一个包含已加载的完整路径信息。
对于GNU系统libc
和Python下面是我发现的最接近。 它使用LD_DEBUG
(中所描述的手册页ld.so(8)
LD_DEBUG=libs python3 -c "import ctypes; ctypes.CDLL('libssl.so.1.0.0')" 2>&1 | \
grep -A 1000 "initialize program: python" | grep -A 3 "find library"
的输出(对于libssl.so.1.0.0
)如下:
15370: find library=libssl.so.1.0.0 [0]; searching
15370: search cache=/etc/ld.so.cache
15370: trying file=/lib/x86_64-linux-gnu/libssl.so.1.0.0
15370:
15370: find library=libcrypto.so.1.0.0 [0]; searching
15370: search cache=/etc/ld.so.cache
15370: trying file=/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
15370: