linux中如何查看so或可执行程序的依赖库
在Linux中,可以使用ldd命令来查看so或可执行程序的依赖库。ldd命令是一个用于查看动态链接库的工具,它可以查看可执行文件和共享库之间的依赖关系。
ldd命令的使用方法很简单,只需要在终端输入ldd可执行文件或共享库的路径,就可以查看其依赖的库。例如,如果要查看/usr/bin/ls的依赖库,可以在终端输入:
ldd /usr/bin/ls
查看结果如下:
linux-vdso.so.1 => (0x00007ffd9a3a1000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f6f7d6d3000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f7d303000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f6f7d046000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6f7ce41000) /lib64/ld-linux-x86-64.so.2 (0x00007f6f7da9d000)
从上面的结果可以看出,ls命令依赖的库有linux-vdso.so.1、libselinux.so.1、libc.so.6、libpcre.so.3、libdl.so.2、/lib64/ld-linux-x86-64.so.2。
除了ldd命令,还可以使用readelf命令来查看so或可执行程序的依赖库。readelf命令是一个用于查看ELF文件内容的工具,它可以查看ELF文件的头部信息、程序段、符号表、动态链接库等内容。
使用readelf命令查看so或可执行程序的依赖库,只需要在终端输入:
readelf -d 可执行文件或共享库的路径
例如,如果要查看/usr/bin/ls的依赖库,可以在终端输入:
readelf -d /usr/bin/ls
查看结果如下:
Dynamic section at offset 0x2f8 contains 25 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libselinux.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000e (SONAME) Library soname: [libselinux.so.1] 0x000000000000000e (SONAME) Library soname: [libc.so.6] 0x000000000000000f (RPATH) Library rpath: [/usr/lib/gcc/x86_64-linux-gnu/7] 0x0000000000000010 (SYMBOLIC) 0x0 0x0000000000000011 (REL) 0x208 0x0000000000000012 (RELSZ) 16 (bytes) 0x0000000000000013 (RELENT) 8 (bytes) 0x0000000000000014 (PLTREL) REL 0x0000000000000017 (JMPREL) 0x220 0x0000000000000019 (INIT) 0x40c0 0x000000000000001b (INIT_ARRAY) 0x601020 0x000000000000001c (FINI_ARRAY) 0x601028 0x000000000000001d (INIT_ARRAYSZ) 8 (bytes) 0x000000000000001e (FINI_ARRAYSZ) 8 (bytes) 0x000000006ffffef5 (GNU_HASH) 0x2c8 0x000000006ffffffb (VERNEED) 0x2f0 0x000000006ffffffe (VERNEEDNUM) 1 0x000000006fffffff (VERSYM) 0x2e8 0x000000006ffffff0 (FLAGS) BIND_NOW 0x000000006ffffff9 (RELACOUNT) 0 0x0000000000000000 (NULL) 0x0
从上面的结果可以看出,ls命令依赖的库有libselinux.so.1、libc.so.6。
总之,在Linux中,可以使用ldd命令和readelf命令来查看so或可执行程序的依赖库,这样可以方便地查看可执行文件和共享库之间的依赖关系,从而帮助我们更好地管理和维护系统。
相关文章