当前位置--> 首 页 --> 文 章 -->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 人次查阅) |