我怎样才能找到一个给定的库名像在libfoo.so.1完整的文件路径?(How can I find

2019-08-02 03:02发布

如果没有实现连接或使用ldd ,我怎么能找到的完整路径库? 有没有一个标准库可在Linux上? (POSIX也许?)

使用lddgrep上是故意使用一个文件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如果从库执行代码或东西。

Answer 1:

使用ldconfig命令是管理环节空间的工具。

-p标志可以让你浏览所有可用的链接库。



Answer 2:

扩展在低级夜总会的回答,命令echo "$(ldconfig -p | grep libGL.so.1 | tr ' ' '\n' | grep /)"将给你一个人的路径。



Answer 3:

如果你不介意的实际加载库,并使用一些非标准的,但广泛使用的功能,要求dladdr从库中的任何符号将返回一个包含已加载的完整路径信息。



Answer 4:

对于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: 


文章来源: How can I find the full file path given a library name like libfoo.so.1?
标签: c linux linker