在Linux操作系统中,动态链接库是一个非常重要的概念,它可以节约系统资源、提高程序运行效率和可维护性。因此,了解如何查看库链接也就成为了必备技能之一。本文将介绍几种在Linux下查看库链接的方法,供读者参考。
创新互联公司主要从事做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务海阳,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
一、ldd命令
ldd(List Dynamic Dependencies)命令是最常用的查看库链接的方法之一。它可以列出一个可执行文件或共享库所依赖的其他共享库。使用ldd命令的方法非常简单,只需要在终端输入以下命令:
ldd 库文件名
例如,我们想要查看/usr/lib/libc.so.6这个共享库的链接情况,只需要在终端输入:
ldd /usr/lib/libc.so.6
输出结果如下:
linux-vdso.so.1 => (0x00007ffdfe7ff000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f6491a0a000)
/usr/lib/ld-linux-x86-64.so.2 (0x00007f64920fb000)
其中,之一列是依赖的库文件名,第二列是依赖库文件的地址。我们可以看到,libc.so.6依赖于libc.so.6、/usr/lib/ld-linux-x86-64.so.2以及linux-vdso.so.1三个库文件。
二、objdump命令
objdump(Objective Dump)命令可以查看二进制文件中的符号表、重定位表等信息,也可用于查看库链接情况。使用objdump命令的方法为:
objdump -p 库文件名
例如,我们想要查看/lib64/libpthread.so.0这个共享库的链接情况,只需要在终端输入:
objdump -p /lib64/libpthread.so.0
输出结果如下:
/lib64/libpthread.so.0: file format elf64-x86-64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x00000000000001f8 0x00000000000001f8 R 0x8
INTERP 0x0000000000000238 0x0000000000000238 0x0000000000000238
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x000000000000ec18 0x000000000000ec18 R E 0x202300
LOAD 0x000000000000f000 0x000000000020f000 0x000000000020f000
0x00000000000014d8 0x0000000000002a70 RW 0x202300
DYNAMIC 0x000000000000f020 0x000000000020f020 0x000000000020f020
0x00000000000001e0 0x00000000000001e0 RW 0x8
NOTE 0x0000000000000254 0x0000000000000254 0x0000000000000254
0x0000000000000044 0x0000000000000044 R 0x4
GNU_EH_FRAME 0x000000000000c7ac 0x000000000000c7ac 0x000000000000c7ac
0x0000000000002cf4 0x0000000000002cf4 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x000000000000f000 0x000000000020f000 0x000000000020f000
0x0000000000001088 0x0000000000001088 R 0x1
Dynamic Section:
NEEDED libgcc_s.so.1
NEEDED libc.so.6
INIT 0x0000000000001dd0
FINI 0x0000000000010ab0
INIT_ARRAY 0x000000000020f000
INIT_ARRAYSZ 0x0000000000000010
FINI_ARRAY 0x000000000020f010
FINI_ARRAYSZ 0x0000000000000008
GNU_HASH 0x00000000000006b8
STRTAB 0x0000000000004c50
SYMTAB 0x0000000000001698
STRSZ 0x000000000000a325
SYMENT 0x0000000000000018
CHECKSUM 0x0000000000000000
VERNEED 0x0000000000004990
VERNEEDNUM 0x0000000000000001
VERSYM 0x0000000000004222
我们可以看到,在Dynamic Section区域中,有一个NEEDED字段,该字段列出了/lib64/libpthread.so.0所依赖的库文件,例如libgcc_s.so.1和libc.so.6。
三、readelf命令
readelf命令可以查看ELF文件信息。ELF(Executable and Linking Format)是Linux上一种常见的二进制文件格式,包括可执行文件和共享库等。readelf命令可以查看ELF文件的头信息、节表、符号表、重定位表和动态链接库依赖等信息。使用readelf命令查看库链接的方法为:
readelf -d 库文件名
例如,我们想要查看/usr/lib/libc.so.6这个共享库的链接情况,只需要在终端输入:
readelf -d /usr/lib/libc.so.6
输出结果如下:
Dynamic section at offset 0x12e78 contns 24 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [linux-vdso.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x420230
0x000000000000000d (FINI) 0x433178
0x0000000000000004 (HASH) 0x3c5b28
0x000000006ffffef5 (GNU_HASH) 0x3bcde0
0x0000000000000005 (STRTAB) 0x3b6898
0x0000000000000006 (SYMTAB) 0x394398
0x000000000000000a (STRSZ) 1326262 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x444000
0x0000000000000002 (PLTRELSZ) 17760 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x41e460
0x0000000000000007 (RELA) 0x41e3a0
0x0000000000000008 (RELASZ) 282328 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000000000001e (FLAGS) BIND_NOW
0x000000006ffffffb (FLAGS_1) Flags: NOW
0x000000006ffffffe (VERNEED) 0x41d0b8
0x000000006fffffff (VERNEEDNUM) 2
0x000000006ffffff0 (VERSYM) 0x3ff25e
0x0000000050000000 (AT_PLATFORM) arch=x86_64
在输出结果中,可以看到NEEDED字段列出了/usr/lib/libc.so.6所依赖的库文件,即linux-vdso.so.1和libc.so.6。此外,readelf命令还可以查看该共享库的符号表、重定位表等信息,有助于深入了解共享库的运行机制。
本文介绍了在Linux下查看库链接的三种方法:ldd命令、objdump命令和readelf命令。这些方法都可以有效地帮助用户了解程序所依赖的共享库,进而保证程序的正常运行。在实际使用中,读者可以根据自己的需要选择使用不同的命令工具。希望读者通过本文的介绍,能够更好地理解Linux操作系统下的共享库机制,为以后的软件开发和系统维护提供更多的参考。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220创建散芹静态肢谨库:历掘基 ar -rcs test.a *.o 查看静态库: ar -tv test.a 解压静态库: ar -x test.a 查看程序依赖的动态库: readelf -a xxx|grep library 如:可以看到,下面的交叉程序hello执行依赖于如下两个动态库。 rebi@ubuntu:~/test$ arm-none-li…
linux系统查看库链接的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux系统查看库链接,Linux下如何查看库链接?,linux 怎么指定静态链接静态库的信息别忘了在本站进行查找喔。
成都网站建设选创新互联(☎:028-86922220),专业从事成都网站制作设计,高端小程序APP定制开发,成都网络营销推广等一站式服务。
文章标题:Linux下如何查看库链接?(linux系统查看库链接)
本文路径:http://www.shufengxianlan.com/qtweb/news49/166849.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联