LD_LIBRARY_PATH   4 comments

ldconfig及 LD_LIBRARY_PATH

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到比 如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就 需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程 序运行时被找到。

3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时 候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

几个特殊的环境变量: LD_DEBUG的用法:

[root@ljj c_c++]# LD_DEBUG=help ls 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.

[root@ljj c_c++]#

Linux支持共享库已经有悠久的历史了,不再是什么新概念了。大家都知道如何编译、连接以及动态加载(dlopen/dlsym/dlclose) 共享库。但是,可能很多人,甚至包括一些高手,对共享库相关的一些环境变量认识模糊。当然,不知道这些环境变量,也可以用共享库,但是,若知道它们,可能就会用得更好。下面介绍一些常用的环境变量,希望对家有所帮助: LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的,它告诉loader:在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。在linux下,还提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,或则在/etc/ld.so.conf.d里创建一个文件,把目录加到这个文件里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。按照惯例,除非你用上述方式指明,loader是不会在当前目录下去找共享库的,正如shell不会在当前目前找可执行文件一样。 LD_PRELOAD 这个环境变量对于程序员来说,也是特别有用的。它告诉loader:在解析函数地址时,优先使用LD_PRELOAD里指定的共享库中的函数。这为调试提供了方便,比如,对于C/C++程序来说,内存错误最难解决了。常见的做法就是重载malloc系列函数,但那样做要求重新编译程序,比较麻烦。使用LD_PRELOAD机制,就不用重新编译了,把包装函数库编译成共享库,并在LD_PRELOAD加入该共享库的名称,这些包装函数就会自动被调用了。在linux下,还提供了另外一种方式来完成同样的功能,你可以把要优先加载的共享库的文件名写在/etc/ld.so.preload里。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。 LD_ DEBUG 这个环境变量比较好玩,有时使用它,可以帮助你查找出一些共享库的疑难杂症(比如同名函数引起的问题)。同时,利用它,你也可以学到一些共享库加载过程的知识。它的参数如下: 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 BIND_NOW 这个环境变量与dlopen中的flag的意义是一致,只是dlopen中的flag适用于显示加载的情况,而BIND_NOW/BIND_NOT适用于隐式加载。 LD_PROFILE/LD_PROFILE_OUTPUT:为指定的共享库产生profile数据,LD_PROFILE指定共享库的名称,LD_PROFILE_OUTPUT指定输出profile文件的位置,是一个目录,且必须存在,默认的目录为/var/tmp/或/var/profile。通过profile数据,你可以得到一些该共享库中函数的使用统计信息。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hahapro/archive/2008/04/01/2237654.aspx

 

 

 

Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找)

移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。

   

编辑本段示例

当执行函数动态链接.so时,如果此文件不在缺省目录下‘/usr/local/lib’ and ‘/usr/lib’.

那么就需要指定环境变量LD_LIBRARY_PATH

假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式:

LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(newdirs是新的路径串)

(注:GNU系统可以自动添加在 /etc/ld.so.conf文件中来实现环境变量的设置)

编辑本段设置方法

在linux下可以用export命令来设置这个值,比如

在linux终端下输入:export LD_LIBRARY_PATH=/opt/au1200_rm/build_tools/bin: $LD_LIBRARY_PATH:

然后再输入:export

即会显示是否设置正确

export方式在重启后失效,所以也可以用 vim /etc/bashrc ,修改其中的LD_LIBRARY_PATH变量。

例如:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/au1200_rm/build_tools/bin。

 

 

 

关于LD_LIBRARY_PATH的问题

博客分类:

UbuntuOracleLinuxSecurity

本人在/etc/environment中设置了环境变量:

JAVA_HOME=/opt/java

ORACLE_HOME=/home/user2/

LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

正常情况下执行没有问题,但使用sudo XXXXXXX的时候,其他变量都好使,除了LD_LIBRARY_PATH;

 

经探索,找到原因:

 

据说因为安全原因,Linux系统做了限制。
LD_LIBRARY_PATH not loading from .profile nor /etc/environment 

     Ubuntu 不能在 profile, environment,.bashrc中设置 LD_LIBRARY_PATH;
解决办法:
     编辑 /etc/ld.so.conf 文件,将指定的路径加上,或者在 /etc/ld.so.conf.d/ 目录中添加一个新的配置文件。

Posted 2011年12月23日 by gw8310 in linux

4 responses to “LD_LIBRARY_PATH

Subscribe to comments with RSS.

  1. Linux 共享库

      Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。

      第二类是动态链接的可执行程序。
      静态可执行程序与动态可执行程序比较

      我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的:
      # ldd /sbin/sln
      not a dynamic executable
      “not a dynamic executable”是 ldd 说明 sln 是静态链接的一种方式。现在,让我们比较 sln 与其非静态同类 ln 的大小:
      # ls -l /bin/ln /sbin/sln
      -rwxr-xr-x 1 root root 23000 Jan 14 00:36 /bin/ln
      -rwxr-xr-x 1 root root 381072 Jan 14 00:31 /sbin/sln
      如您所见,sln 的大小超过 ln 十倍。ln 比 sln 小这么多是因为它是动态可执行程序。动态可执行程序是不完整的程序,它依靠外部共享库来提供运行所需的许多函数。
      动态链接相关性
      要查看 ln 依赖的所有共享库的列表,可以使用 ldd 命令:
      # ldd /bin/ln
      libc.so.6 => /lib/libc.so.6 (0x40021000)
      /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
      如您所见,ln 依赖外部共享库 libc.so.6 和 ld-linux.so.2。通常,动态链接的程序比其静态链接的等价程序小得多。不过,静态链接的程序可以在某些低级维护任务中发挥作用。例如,sln 是修改位于 /lib 中的不同库符号链接的极佳工具。但通常您会发现几乎所有 Linux 系统上的可执行程序都是某种动态链接的变体。
      动态装入器
      那么,如果动态可执行程序不包含运行所需的所有函数,Linux 的哪部分负责将这些程序和所有必需的共享库一起装入,以使它们能正确执行呢?答案是动态装入器(dynamic loader),它实际上是您在 ln 的 ldd 清单中看到的作为共享库相关性列出的 ld-linux.so.2 库。动态装入器负责装入动态链接的可执行程序运行所需的共享库。现在,让我们迅速查看一下动态装入器如何在系统上找到适当的共享库。
      ld.so.conf
      动态装入器找到共享库要依靠两个文件 — /etc/ld.so.conf 和 /etc/ld.so.cache。如果您对 /etc/ld.so.conf 文件进行 cat 操作,您可能会看到一个与下面类似的清单:
      $ cat /etc/ld.so.conf
      /usr/X11R6/lib
      /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3
      /usr/lib/mozilla
      /usr/lib/qt-x11-2.3.1/lib
      /usr/local/lib
      ld.so.conf 文件包含一个所有目录(/lib 和 /usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。
      ld.so.cache
      但是在动态装入器能“看到”这一信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点:
      # ldconfig
      当 ldconfig 操作结束时,您会有一个最新的 /etc/ld.so.cache 文件,它反映您对 /etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看您在 /etc/ld.so.conf 中指定的所有新目录。
      
      ldconfig 技巧
      
      要查看 ldconfig 可以“看到”的所有共享库,请输入:
      
      # ldconfig -p | less
      还有另一个方便的技巧可以用来配置共享库路径。有时候您希望告诉动态装入器在尝试任何 /etc/ld.so.conf 路径以前先尝试使用特定目录中的共享库。在您运行的较旧的应用程序不能与当前安装的库版本一起工作的情况下,这会比较方便。
      LD_LIBRARY_PATH
      要指示动态装入器首先检查某个目录,请将 LD_LIBRARY_PATH 变量设置成您希望搜索的目录。多个路径之间用冒号分隔;例如:
      # export LD_LIBRARY_PATH=”/usr/lib/old:/opt/lib”
      导出 LD_LIBRARY_PATH 后,如有可能,所有从当前 shell 启动的可执行程序都将使用 /usr/lib/old 或 /opt/lib 中的库,如果仍不能满足一些共享库相关性要求,则转回到 /etc/ld.so.conf 中指定的库。

  2. etc/ld.so.conf:

    这个文件记录了编译时使用的动态链接库的路径。
    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
    如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
    没有指定 –prefix=/usr 这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib

    =================
    库文件的路径如 /usr/lib 或 /usr/local/lib 应该在 /etc/ld.so.conf 文件中,这样 ldd 才能找到这个库。在检查了这一点后,要以 root 的身份运行 /sbin/ldconfig 。

    将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库
    将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。

    ldconfig是个什么东东吧 :

    它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
    简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
    因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
    使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
    编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。

  3. LINUX动态链接库高级应用(etc/ld.so.conf)共享动态链接库
    3.1 动态链接库配置文件

    为了让动态链接库为系统所使用,需要维护动态链接库的配置文件–/etc/ld.so.conf. 此文件内,存放着可被LINUX共享的动态链接库所在 目录的名字(系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔.一般的LINUX发行版中,此文件均 含一个共享目录/usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录.

    下面看看我的系统中此文件的内容如何:

    # cat /etc/ld.so.conf
    /usr/X11R6/lib
    /usr/zzz/lib
    #

    由上可以看出,该动态库配置文件中,增加了一个/usr/zzz/lib目录.这是我自己新建的共享库目录,下面存放我新开发的可供系统共享的动态链接库.

    3.2 动态链接库管理命令

    为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig.此执行程序存放在/sbin目录下.

    ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜 索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

    ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.

    ldconfig命令行用法如下:

    ldconfig [-v|–verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|–print-cache] [-c FORMAT] [–format=FORMAT] [-V] [-?|–help|–usage] path…

    ldconfig可用的选项说明如下:

    (1) -v或–verbose : 用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字.

    (2) -n : 用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib,/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录.

    (3) -N : 此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache).若未用-X选项,ldconfig照常更新文件的连接.

    (4) -X : 此选项指示ldconfig不更新文件的连接.若未用-N选项,则缓存文件正常更新.

    (5) -f CONF : 此选项指定动态链接库的配置文件为CONF,系统默认为/etc/ld.so.conf.

    (6) -C CACHE : 此选项指定生成的缓存文件为CACHE,系统默认的是/etc/ld.so.cache,此文件存放已排好序的可共享的动态链接库的列表.

    (7) -r ROOT : 此选项改变应用程序的根目录为ROOT(是调用chroot函数实现的).选择此项时,系统默认的配置文件/etc/ld.so.conf,实际对应的为 ROOT/etc/ld.so.conf.如用-r /usr/zzz时,打开配置文件/etc/ld.so.conf时,实际打开的是/usr/zzz/etc/ld.so.conf文件.用此选项,可以 大大增加动态链接库管理的灵活性.

    ( -l : 通常情况下,ldconfig搜索动态链接库时将自动建立动态链接库的连接.选择此项时,将进入专家模式,需要手工设置连接.一般用户不用此项.

    (9) -p或–print-cache : 此选项指示ldconfig打印出当前缓存文件所保存的所有共享库的名字.

    (10) -c FORMAT 或 –format=FORMAT : 此选项用于指定缓存文件所使用的格式,共有三种ld(老格式),new(新格式)和compat(兼容格式,此为默认格式).

    (11) -V : 此选项打印出ldconfig的版本信息,而后退出.

    (12) -? 或 –help 或 –usage : 这三个选项作用相同,都是让ldconfig打印出其帮助信息,而后退出.

    举三个例子:

    例1:

    # ldconfig -p
    793 libs found in cache `/etc/ld.so.cache””
    libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2
    libzvt.so (libc6) => /usr/lib/libzvt.so
    libz.so.1.1.3 (libc6) => /usr/lib/libz.so.1.1.3
    libz.so.1 (libc6) => /lib/libz.so.1
    ……
    #

    注: 有时候用户想知道系统中有哪些动态链接库,或者想知道系统中有没有某个动态链接库,这时,可用-p选项让ldconfig输出缓存文件中的动态链接库列 表,从而查询得到.例子中,ldconfig命令的输出结果第1行表明在缓存文件/etc/ld.so.cache中找到793个共享库,第2行开始便是 一系列共享库的名字及其全名(绝对路径).因为实际输出结果太多,为节省篇幅,以……表示省略的部分.

    例2:

    # ldconfig -v
    /lib:
    liby.so.1 -> liby.so.1
    libnss_wins.so -> libnss_wins.so
    ……
    /usr/lib:
    libjscript.so.2 -> libjscript.so.2.0.0
    libkspell.so.2 -> libkspell.so.2.0.0
    ……
    /usr/X11R6/lib:
    libmej-0.8.10.so -> libmej-0.8.10.so
    libXaw3d.so.7 -> libXaw3d.so.7.0
    ……
    #

    注: ldconfig命令在运行正常的情况下,默认不输出什么东西.本例中用了-v选项,以使ldconfig在运行时输出正在扫描的目录及搜索到的共享库, 用户可以清楚地看到运行的结果.执行结束后,ldconfig将刷新缓存文件/etc/ld.so.cache.

    例3:

    # ldconfig /usr/zhsoft/lib
    #

    注: 当用户在某个目录下面创建或拷贝了一个动态链接库,若想使其被系统共享,可以执行一下”ldconfig 目录名”这个命令.此命令的功能在于让ldconfig将指定目录下的动态链接库被系统共享起来,意即:在缓存文件/etc/ld.so.cache中追 加进指定目录下的共享库.本例让系统共享了/usr/zhsoft/lib目录下的动态链接库.需要说明的是,如果此目录不在/lib,/usr/lib 及/etc/ld.so.conf文件所列的目录里面,则再度运行ldconfig时,此目录下的动态链接库可能不被系统共享了.

    3.3 动态链接库如何共享

    了解了以上知识,我们可以采用以下三种方法来共享动态链接库注:均须在超级用户状态下操作,以我的动态链接库libmy.so共享过程为例)

    (1) 拷贝动态链接库到系统共享目录下,或在系统共享目录下为该动态链接库建立个连接(硬连接或符号连接均可,常用符号连接).这里说的系统共享目录,指 的是LINUX动态链接库存放的目录,它包含/lib,/usr/lib以及/etc/ld.so.conf文件内所列的一系列目录.

    # cp libmy.so /lib
    # ldconfig
    #

    或:

    # ln -s `pwd`/libmy.so /lib
    # ldconfig
    #

    (2)将动态链接库所在目录名追加到动态链接库配置文件/etc/ld.so.conf中.

    # pwd >> /etc/ld.so.conf
    # ldconfig
    #

    (3)利用动态链接库管理命令ldconfig,强制其搜索指定目录,并更新缓存文件,便于动态装入.

    # ldconfig `pwd`
    #

    需 要说明的是,这种操作方法虽然有效,但效果是暂时的,供程序测试还可以,一旦再度运行ldconfig,则缓存文件内容可能改变,所需的动态链接库可能 不被系统共享了.与之相比较,前两种方法是可靠的方法,值得业已定型的动态链接库共享时采用.前两种方法还有一个特点,即最后一条命令都是 ldconfig,也即均需要更新一下缓存文件,以确保动态链接库的共享生效.

    四、含有动态函数的程序的编译

    4.1 防止编译因未指定动态链接库而出错

    当一个程序使用动态函数时,编译该程序时就必须指定含所用动态函数的动态链接库,否则编译将会出错退出.如本文示例程序ady.c的编译(未明确引用动态链接库libmy.so):

    # cc -o ady ady.c
    /tmp/ccL4FsJp.o: In function `main””:
    /tmp/ccL4FsJp.o(.text+0x43): undefined reference to `gettime””
    collect2: ld returned 1 exit status
    #

    注: 因为ady.c所含的动态函数getdate,gettime不在系统函数库中,所以连接时出错.

    4.2 编译时引用动态链接库的几种方式

    (1)当所用的动态链接库在系统目录(/lib,/usr/lib)下时,可用编译选项-l来引用.即:

    # cc -lmy -o ady ady.c
    #

    注:编译时用-l选项引用动态链接库时,库名须使用其缩写形式.本例的my,表示引用libmy.so库.若引用光标库libncurses.so,须用-lncurses.注意,-l选项与参数之间不能有空格,否则会出错.

    (2)当所用的动态链接库在系统目录(/lib,/usr/lib)以外的目录时,须用编译选项-L来指定动态链接库所在的目录(供编译器查找用),同时用-l选项指定缩写的动态链接库名.即:

    # cc -L/usr/zzz/lib -lmy -o ady ady.c
    #

    (3)直接引用所需的动态链接库.即:

    # cc -o ady ady.c libmy.so
    #

    # cc -o ady ady.c /lib/libmy.so
    #

    等等.其中,动态链接库的库名可以采用相对路径形式(文件名不以/开头),也可采用绝对路径形式(文件名以/开头).

    五、动态链接程序的运行与检查

    5.1 运行

    编译连接好含动态函数的程序后,就可以运行它了.动态链接程序因为共享了系统中的动态链接库,所以其空间占用很小.但这并不意味功能的减少,它的执行与静态连接的程序执行,效果完全相同.在命令提示符下键入程序名及相关参数后回车即可,如下例:

    $ ady
    动态链接库高级应用示范
    当前日期: 2002-03-11
    当前时间: 19:39:06
    $

    5.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(或–verbose)选项.

    ldd的命令行参数为FILE…,即一个或多个文件名(动态链接程序或动态链接库).

    例1:

    $ ldd ady
    libmy.so => ./libmy.so (0x40026000)
    libc.so.6 => /lib/libc.so.6 (0x40028000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    $

    注: 每行=>前面的,为动态链接程序所需的动态链接库的名字,而=>后面的,则是运行时系统实际调用的动态链接库的名字,所需的动态链接库在系统 中不存在时,=>后面将显示”not found”,括号所括的数字为虚拟的执行地址.本例列出ady所需的三个动态链接库,其中libmy.so为自己新建的动态链接库,而 libc.so.6与/lib/ld-linux.so.2均为系统的动态链接库,前一个为基本C库,后一个动态装入库(用于动态链接库的装入及运行).

    例2:

    $ ldd -v ady
    libmy.so => ./libmy.so (0x40026000)
    libc.so.6 => /lib/libc.so.6 (0x40028000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    Version information:
    ./ady:
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
    ./libmy.so:
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
    /lib/libc.so.6:
    ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2
    ld-linux.so.2 (GLIBC_2.2.3) => /lib/ld-linux.so.2
    ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
    ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2
    ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
    $

    注:本例用-v选项以显示尽可能多的信息,所以例中除列出ady所需要的动态链接库外,还列出了程序所需动态链接库版本方面的信息.

    http://blog.csdn.net/wuwei_ql/archive/2009/04/17/4087018.aspx

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: