以前总是不明白为什么不同的模块是相互独立的编译,相互之间不存在的调用关系, 怎么做到在使用的时候加载不使用的时候卸载掉? 现在总算是明白了。其实就是将一个功能做成一个动态库,在window中叫dll,在Unix/Linux中叫做so。通过配置在运行的时候,在运行的时候,通过一些特殊的函数对dll或者so进行操作。找到函数的地址,调用函数。在使用函数的时候找函数,不是使用的时候释放就可以了。
我也找不到合适的列子。我直接上代码吧。通过输入不同的so或者dll执行不同的内容。本文件以Unix/Linux中的C语言代码为例子。使用到的知识很简单。就是dlopen和dlsym函数。所有的函数都在dlfcn.h头文件中。
void * dlopen( const char * pathname, int mode); pathname:so或者dll文件的路径,在Linux中必须是以"./"或者"../"开始的相对路径 或者 以"/"开始的绝对路径 <DIV class=para>打开错误返回NULL</DIV><DIV class=para>成功,返回库引用</DIV>.</DIV> |
dlsym(void *dp, char * funtionname); 数返回值是void*,指向函数的地址 |
dlclose(void *dp) 关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。 |
主函数
#include <stdio.h> int main(){ |