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

运维 系统运维
你对操作系统了解么?现在很多人应该了解微软,其实现在Linux也越来越受到广大程序员的喜欢。这里为你详细介绍应注意的使用Linux动态库应注意的问题,为你在学习的使用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. #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的输出中就只有用到的

系统库。

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

  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) 

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

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

  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动态库应注意的问题。

责任编辑:小霞 来源: CSDN
相关推荐

2018-05-17 11:06:52

数据库SQL Server设计方案

2010-04-02 16:31:58

Oracle RAC

2010-04-27 16:54:11

Oracle RAC

2013-05-27 11:11:41

综合布线技术综合布线施工步骤综合布线

2010-09-07 11:00:42

2017-01-03 15:23:56

Android动态加载SO库

2011-11-09 14:28:43

SaaS云计算

2009-07-11 10:39:16

综合布线设计实施

2009-10-12 11:52:38

综合布线系统测试

2010-04-09 09:46:38

Oracle RAC

2015-06-18 17:18:56

综合布线环境保护

2012-09-18 13:01:23

SybaseLinux

2022-11-09 08:50:39

Oracle数据库PG类

2009-06-29 16:09:20

JSP编程

2014-08-26 10:29:31

2010-06-01 10:37:15

SVN合并

2009-07-28 14:30:07

单模光纤接续

2010-03-10 15:23:06

2010-09-25 13:51:46

2020-03-27 22:18:55

JavaScript编程语言代码
点赞
收藏

51CTO技术栈公众号