美文网首页
Linux依赖库查看命令

Linux依赖库查看命令

作者: NullUser | 来源:发表于2023-07-26 17:52 被阅读0次

ldd

ldd查看文件依赖的动态库及其路径。

ldd a.out

输出:

    linux-vdso.so.1 (0x00007ffe87f83000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f46a3a00000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f46a3600000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f46a3919000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f46a3d03000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f46a3ccb000)
  • 部分路径是软连接,可以ls -l查看,如:
ls -l /lib/x86_64-linux-gnu/libstdc++.so.6

输出

lrwxrwxrwx 1 root root 19  5月 13  2022 /lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.30

strings

strings查看库文件用了哪些GLIBC版本

strings /lib/libstdc++.so.6 | grep GLIBC

ldconfig

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。

ldconfig的主要用途:

默认搜寻/lilb/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件(不包括LD_LIBRARY_PATH变量的信息)。

搜索出可共享的动态链接库,库文件的格式为:lib*.so.*,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。

缓存文件默认为/etc/ld.so.cache,该文件保存已排好序的动态链接库名字列表。

查看缓存的动态库名字(使用-p参数)

ldconfig -p
ldconfig -p | grep libc++ //过滤libc++库

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

  • /lib/usr/lib中添加了动态库后,需要运行ldconfig使动态库可被找到
sudo ldconfig
  • 如果不在/lib/usr/lib中加入库文件,则需要将库文件的路径加入/etc/ld.so.conf,然后运行ldconfig
echo "/home/my/lib" >> /etc/ld.so.conf
sudo ldconfig

readelf

readelf -a exe

objdump

objdump查看程序用到了哪个版本的库函数

objdump -x exe

示例

程序因为依赖库问题无法运行。

1. 使用ldd查看程序的依赖库与路径

ldd exe

如果输出信息中提示动态库无法找到:

  • 方法一:将动态库拷贝到/lib/usr/lib下,执行ldconfig命令。
  • 方法二:将动态库的路径写入/etc/ld.so.conf,执行ldconfig命令。
echo "/home/my/lib" >> /etc/ld.so.conf
sudo ldconfig
  • 方法三:将动态库路径写入变量LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/my/lib

2.提示GLIBC_xx not found

2.1检查程序依赖的GLIBC版本

  • 方法一:使用readelf命令
readelf -s exe | grep -oP "GLIBC.*" | sort | uniq
  • 方法二:使用objdump命令
objdump -x exe | grep GLIBC

2.2检查系统库文件的GLIBC版本。

查看输出的GLIBC版本信息是否符合程序所要求的GLIBC版本

  • 方法一:使用strings命令查看GLIBC版本
strings /lib/libc.so.6 | grep GLIBC
strings /lib/libstdc++.so.6 | grep GLIBC
  • 方法二:使用ldd命令,可以输出GLIBC版本信息
ldd --version
  • 方法三:使用getconf命令
getconf GNU_LIBC_VERSION

参考

gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行 版本兼容问题 - Bigben - 博客园 (cnblogs.com)

相关文章

网友评论

      本文标题:Linux依赖库查看命令

      本文链接:https://www.haomeiwen.com/subject/typkpdtx.html