Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2420264
  • 博文数量: 384
  • 博客积分: 10193
  • 博客等级: 上将
  • 技术积分: 3785
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-09 18:02
文章分类

全部博文(384)

文章存档

2011年(10)

2010年(29)

2009年(39)

2008年(36)

2007年(43)

2006年(198)

2005年(29)

分类: LINUX

2009-03-25 21:12:50

在Linux/UNIX中, 大部分程序是动态链接程序, 直到程序在执行的时候, 才会去找对应的库文件, 使用ldd可以查看应用程序使用的库文件:

blueice2:/u01/app/oracle/product/10.2.0/db_3/bin# ldd sqlplus
        linux-gate.so.1 =>  (0xb7fff000)
        libsqlplus.so => /u01/app/oracle/product/10.2.0/db_3/lib/libsqlplus.so (0xb7f4b000)
        libclntsh.so.10.1 => /u01/app/oracle/product/10.2.0/db_3/lib/libclntsh.so.10.1 (0xb71a8000)
        libnnz10.so => /u01/app/oracle/product/10.2.0/db_3/lib/libnnz10.so (0xb6fa3000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb6f84000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb6f5e000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb6f45000)
        libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb6f2c000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb6dcb000)
        /lib/ld-linux.so.2 (0xb8000000)


在HPUX中, 可以使用lsatr查看应用程序使用什么路径来寻找库文件.


hbsett1:[/]#chatr /oracle/product/9.2/lib//libclntsh.so.9.0
/oracle/product/9.2/lib//libclntsh.so.9.0:
         64-bit ELF shared library
         shared library dynamic path search:
             LD_LIBRARY_PATH    enabled  first
             SHLIB_PATH         enabled  second
             embedded path      enabled  third  /oracle/product/9.2/lib
         internal name:
             libclntsh.so.9.0
         shared library list:
             libwtc9.so
             librt.so.1
             libnss_dns.so.1
             libdl.so.1
             libm.so.1
             libpthread.so.1
             libCsup.so.1
             libunwind.so.1
         shared library mapped private disabled
         shared vtable support disabled
         explicit unloading enabled
         linkage table protection disabled
         segments:
             index type     address      flags size
                 7 text 4000000000000000 z---c-    D (default)
                 8 data 6000000000000000 ---m--    D (default)
         kernel assisted branch prediction enabled
         lazy swap allocation for dynamic segments disabled
         nulptr dereferences trap enabled
         address space model: default
         caliper dynamic instrumentation disabled

由输出可以看出, 这个库首先会去LD_LIBRARY_PATH环境变量指定的目录中去找需要的动态链接库, 然后去SHLIB_PATH环境变量指定的目录中去找需要的动态链接库, 最后在内嵌的动态链接库目录中去找, 如果在以上目录中都找不到需要的动态链接库, 就报错, 停止执行.

在Linux上可以设置环境变量

export LD_DEBUG=all

然后运行程序, 就可以看到动态链接库加载的过程, 设置LD_DEBUG=help, 可以看到LD_DEBUG的帮助信息.

blueice2:/u01/app/oracle/product/10.2.0/db_3/bin# man ld.so
Valid options for the LD_DEBUG environment variable are:

  libs        display library search paths
  reloc       display relocation processing
  files       display progress for input file
  symbols     display symbol table processing
  bindings    display information about symbol binding
  versions    display version dependencies
  all         all previous options combined
  statistics  display relocation statistics
  unused      determined unused DSOs
  help        display this help message and exit

To direct the debugging output into a file instead of standard output
a filename can be specified using the LD_DEBUG_OUTPUT environment variable.


更多信息请参考man ld.so

阅读(4518) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~