1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 运维 - 正文

君子好学,自强不息!

剖析使用Linux动态库应注意的问题

2022-11-12 | 运维 | admin | 596°c
A+ A-

你对操作系统了解么?现在很多人应该了解微软,其实现在Linux也越来越受到广大程序员的喜欢。这里为你详细介绍应注意的使用Linux动态库应注意的问题,为你在学习的使用Linux动态库应注意的问题起一定的作用。

1、无论是动态库的显式调用还是隐式调用,都需要用

ldconfig工具将动态库的路径加到系统库列表中,否则运行时会出错。

2、可以用ldd命令检查程序都使用到哪些共享库

ldd命令行用法如下:

ldd [–version] [-v|–verbose] [-d|–data-relocs] [-r|–function-relocs] [–help] FILE…

各选项说明如下:

(1) –version : 此选项用于打印出ldd的版本号.

(2) -v 或 –verbose : 此选项指示ldd输出关于所依赖的动态链接库的尽可能详细的信息.

(3) -d 或 –data-relocs : 此选项执行重定位,并且显示不存在的函数.

(4) -r 或 –function-relocs : 此选项执行数据对象与函数的重定位,同时报告不存在的对象.

(5) –help : 此选项用于打印出ldd的帮助信息.

我们一般用-v选项.

现在看几个实例

⑴用静态库连接时的结果

#lddmain 
  • libc.so.6 => /lib/tls/libc.so.6(0xb74ad000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2(0xb75eb000)
  • 可见使用静态库时,由于库已经被编译成程序的一部分,因此ldd的输出中就只有用到的

    系统库。

    ⑵用动态库隐式连接时的结果

    libtest.so
    =>
    /root/exercise/libtest.so(0xb75e2000) 
  • libc.so.6 => /lib/tls/libc.so.6(0xb74ab000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2(0xb75eb000)
  • 可见隐式使用动态库时,所有用到的动态库(包括系统和用户的)都会被显示出来。

    ⑶动态库显式连接时的结果

    lddmain 
  • libdl.so.2 => /lib/libdl.so.2(0xb75e1000) libc.so.6 => /lib/tls/libc.so.6(0xb74aa000)
  • /lib/ld-linux.so.2 => /lib/ld-linux.so.2(0xb75eb000)
  • 可见显式使用动态库时,程序中不再保存运行时打开动态库的信息,只保留用到的系统库的信息.

    这个与使用静态库时的输出是类似的.

    本文来源:1818IP

    本文地址:https://www.1818ip.com/post/8910.html

    免责声明:本文由用户上传,如有侵权请联系删除!

    发表评论

    必填

    选填

    选填

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。