1 / 3
文档名称:

UNIX系统开发-动态链接程序搜索目录.doc

格式:doc   页数:3
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

UNIX系统开发-动态链接程序搜索目录.doc

上传人:管理资源吧 2012/2/6 文件大小:0 KB

下载得到文件列表

UNIX系统开发-动态链接程序搜索目录.doc

文档介绍

文档介绍:UNIX系统开发-动态链接程序搜索目录
在采用动态链接方式对程序进行编译,链接时候。链接程序只是在最终的可执行文件中记录下关于所引用的共享库中的符号的一些登记信息,以便在程序被执行时,动态链接程序能够根据这些登记信息找到相应的代码。因此登记动态链接方式而言,除了在链接阶段涉及到对库文件的搜索路径外,还有一个在程序运行阶段对库文件的搜索问题。
命令行中的-L选项已经得到了比较好的解决。对于第二个问题,我们必须提供一种机制,使得动态链接程序能够找到相应的动态库,然后才能将其代码映射到其自己的地址空间中。
UNIX系统中对这些问题的解决实际上采取了类似的方法。程序员可以使用LD_RUN_PATH来解决上面的第二个问题。同PATH变量相同,LD_RUN_PATH的值也是一系列由冒号分隔的绝对路径名组成的。在此环境变量中,我们可以列出所用到的动态库所在的那些目录,一般动态链接程序在程序运行时对这些目录进行搜索。例如,我们可以定义LD_RUN_PATH的值如下:
$ LD_RUN_PATH=$HOME/lib;export LD_RUN_PATH
这里我们在LD_RUN_PATH中只指定了一个目录名。在使用如下命令:
$ cc -L $HOME/lib -o myprog -l test
建立可执行文件myprog之后,在shell提示符下输入:
$ myprog ...
在执行此程序时,动态链接程序将根据LD_RUN_PATH中所记录的路径($HOME/lib),。
在搜索完LD_RUN_PATH指定的各个目录之后,动态链接程序将根据缺省设置搜索系统标准位置。对于动态链接程序而言,库的标准位置只有/usr/lib。编译系统所提供的库的每一个可执行版本都保留在/usr/lib目录中。
上一节我们介绍过的环境变量LD_LIBRARY_PATH实际上也能起到同样的作用。并且使用此环境变量还有一个好处就是在链接生成了可执行文件之后,可以把此可执行文件用到的共享库移至另一个目录中,不必重新对程序进行链接。只需恰当地设置LD_LIBRARY_PATH的值,仍然可以让动态链接程序找到相应的动态库。
仍以上例来说明这个问题。假定在生成了myprog文件之后,$HOME/sharedlib下。此时仅仅将LD_RUN_PATH的值设成是$HOME/sharedlib是不行的,因为编译产生的可执行程序将无法使用$HOME/。但可以在LD_LIBRARY_PATH中指定新的目录。
$LD_LIBRARY_PATH= $HOME/sharedlib;export LD_LIBRARY_PATH
这样再执行myprog时,动态链接程序将首先在$HOME/。当然此时它是找不到该文件的。于是根据LD_LIBRARY_PATH的值,动态链接程序将搜索$HOME/sharedlib目录,这时它