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

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  你对操作系统了解么?现在很多人应该了解微软,其实现在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)用静态库连接时的结果

  #ldd main libc.so.6 => /lib/tls/libc.so.6 (0xb74ad000)

  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

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

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

  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)

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

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

  ldd main 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)

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

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

困难是人的教科书。

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

相关文章:

你感兴趣的文章:

标签云: