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

发表于:2012-2-28 10:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Linux
分享:

  你对操作系统了解么?现在很多人应该了解微软,其实现在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选项。

  现在看几个实例

  1)用静态库连接时的结果

  1. #ldd main  
  2. libc.so.6 => /lib/tls/libc.so.6 (0xb74ad000)  
  3. /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

  可见使用静态库时,由于库已经被编译成程序的一部分,因此ldd的输出中就只有用到的系统库。

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

  1. libtest.so => /root/exercise/libtest.so (0xb75e2000)  
  2. libc.so.6 => /lib/tls/libc.so.6 (0xb74ab000)  
  3. /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

  可见隐式使用动态库时,所有用到的动态库(包括系统和用户的)都会被显示出来。

  3)动态库显式连接时的结果

  1. ldd main  
  2. libdl.so.2 => /lib/libdl.so.2 (0xb75e1000)  
  3. libc.so.6 => /lib/tls/libc.so.6 (0xb74aa000)  
  4. /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

  可见显式使用动态库时,程序中不再保存运行时打开动态库的信息,只保留用到的系统库的信息。

  这个与使用静态库时的输出是类似的。以上就是使用Linux动态库应注意的问题。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号