Linux依赖库查看命令

2023-07-26  本文已影响0人  NullUser

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 /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通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

sudo ldconfig
echo "/home/my/lib" >> /etc/ld.so.conf
sudo ldconfig

readelf

readelf -a exe

objdump

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

objdump -x exe

示例

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

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

ldd exe

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

echo "/home/my/lib" >> /etc/ld.so.conf
sudo ldconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/my/lib

2.提示GLIBC_xx not found

2.1检查程序依赖的GLIBC版本

readelf -s exe | grep -oP "GLIBC.*" | sort | uniq
objdump -x exe | grep GLIBC

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

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

strings /lib/libc.so.6 | grep GLIBC
strings /lib/libstdc++.so.6 | grep GLIBC
ldd --version
getconf GNU_LIBC_VERSION

参考

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

上一篇 下一篇

猜你喜欢

热点阅读