快速业务通道

Linux动态链接库.so文件的创建与使用

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-23
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号