当前位置--> 首 页 --> 文 章 -->Linux Develop

※阅读文章※

Linux程式设计-14.动态函数库


作者:不祥 [文章出自: www.fanqiang.com]



--------------------------------------------------------------------------------

本节说明Linux下动态函数库的使用及设计。 
大多数大型的UNIX软体都会将许多个别的部份拆开来设计,通常这些部份被称为「plugins」或「modules」。它们会用许多方式来结合,如「pipe」、「IPC」或「shared objects」。 

Linux下的Dynamic Linking Loader介面标准来自於Solaris。 

在Dynamic Linking的操作方式下,所有的函数及资料变数都被称为「symbol」,要使用时,需要透过dlsym来找出其实际位址。 
  
  



--------------------------------------------------------------------------------

所有动态函数载入的函数均宣告在中,共有四个函数。 
void *dlopen (const char *filename, int flag); 
const char *dlerror(void); 
void *dlsym(void *handle, char *symbol); 
int dlclose (void *handle); 



--------------------------------------------------------------------------------

dlopen()的作用为寻找函数库档案,开启它、并做一些初始化的动作。 
filename如果以"/"符号开始,dlopen()将不会搜寻该函数库的路径,否则它将会透过以下方式搜寻档案: 

透过LD_LIBRARY_PATH所指定的路径搜寻 
/etc/ld.so.cache所指定的路径。该档案是由ldconfig所产生,其设定位於/etc/ld.so.conf。 
找寻/usr/lib及/lib两个内定目录。 
flag有三个: 
RTLD_GLOBAL : 在函数库中的变数内定是不输出的。指定RTLD_GLOBAL可输出这些变数。 
RTLD_LAZY : 当函数被执行时,才找出所使用的变数对照表。 
RTLD_NOW : 当函数被载入时,立刻找出所使用的变数对照表。 
RTLD_GLOBAL可与RTLD_LAZY或RTLD_NOW结合,RTLD_LAZY及RTLD_NOW不可同时使用。 



--------------------------------------------------------------------------------

dlerror()返回最近发生的错误讯息,如果没有错误发生,那麽将会返回NULL。 

--------------------------------------------------------------------------------

dlsym()载入所指定的函数。 

--------------------------------------------------------------------------------

dlclose()关闭开启的函数库。它会检查一个对照计数,将开启的函数库次数数量减一,如果为零,则关闭该函数库。 

--------------------------------------------------------------------------------

hellodl 
  
  
  
  


--------------------------------------------------------------------------------

hello.so的设计 
  
  
  
  


--------------------------------------------------------------------------------

 &nbs


文章加入时间: 2004-11-17 14:56:33 责任编辑: w9   (2577 人次查阅)
 
Copyright © 1998-2004 中国PHP联盟 All rights reserved.