Linux动态链接库.so文件的创建与使用
RARY值;
(2) 动态链接缓冲文件/etc/ld.so.cache (3) 目录/lib,/usr/lib flag表示在什么时候解决未定义的符号(调用).取值有两个: 1) RTLD_LAZY : 表明在动态链接库的函数代码执行时解决. 2) RTLD_NOW : 表明在dlopen返回前就解决所有未定义的符号,一旦未解决,dlopen将返回错误. dlopen调用失败时,将返回NULL值,否则返回的是操作句柄. 2.1.3 dlsym : 取函数执行地址 原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址.由此地址,可以带参数执行相应的函数. 如程序代码: void (*add)(int x,int y); /* 说明一下要调用的动态函数add */ add=dlsym("xxx.so","add"); /* 打开xxx.so共享库,取add函数地址 */ add(89,369); /* 带两个参数89和369调用add函数 */ 2.1.4 dlclose : 关闭动态链接库 原型为: int dlclose (void *handle); dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载. 2.2 在程序中使用动态链接库函数 2.2.1 程序范例 下面的程序装载了动态链接库my.so,并用getdate,gettime取得当前日期与时间后输出. ---------------------------------------------------------------------- 1 /************************************/ 2 /* 文件名称: dy.c */ 3 /* 功能描述: 动态链接库应用示范程序 */ 4 /* 程序编写: 纵横软件制作中心雨亦奇 */ 5 /* 编写时间: 2001-06-28 */ 6 /************************************/ 7 8 #include "stdio.h" /* 包含标准输入输出文件 */ 9 10 #include "dlfcn.h" /* 包含动态链接功能接口文件 */ 11 #define SOFILE "./my.so" /* 指定动态链接库名称 */ 12 13 #define SHARED /* 定义宏,确认共享,以便引用动态函数 */ 14 #include "datetime.h" /* 包含用户接口文件 */ 15 16 main() 17 { 18 DATETYPE d; 19 TIMETYPE t; 20 void *dp; 21 char *error; 22 23 puts("动态链接库应用示范"); 24 25 dp=dlopen(SOFILE,RTLD_LAZY); /* 打开动态链接库 */ 26 27 if (dp==NULL) /* 若打开失败则退出 */ 28 { 29 fputs(dlerror(),stderr); 30 exit(1); 31 } 32 33 getdate=dlsym(dp,"getdate"); /* 定位取日期函数 */ 34 35 error=dlerror(); /* 检测错误 */ 36 if (error) /* 若出错则退出 */ 37 { 38 fputs(error,stderr); 39 exit(1); 40 } 41 42 getdate(&d); /* 调用此共享函数 */ 43 printf("当前日期: d-d-dn",d.year,d.mon,d.day); 44 45 gettime=dlsym(dp,"gettime"); /* 定位取时间函数 */ 46 47 error=dlerror(); /* 检测错误 */ 48 if (error) /* 若出错则退出 */ 49 { 50 fputs(error,stderr); 51 exit(1); 52 } 53 54 gettime(&t); /* 调用此共享函数 */ 55 printf("当前时间: d:d:dn",t.hour,t.min,t.sec); 56 57 dlclose(dp); /* 关闭共享库 */ 58 59 exit(0); /* 成功返回 */ 60 61 } ----------------------------------------------------------------------
程序说明: 第8行: 包含标准输入输出头文件,程序中使用了printf,puts,fputs等标准输入输出函数,需要让编译器根据头文件中 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |