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)