linux创建32位动态链接库,LINUX系统中动态链接库的创建与使用

exit(1);

40 }

41

42 getdate(&d); /* 调用此共享函数 */

43 printf("当前日期: %04d-%02d-%02d\n",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("当前时间: %02d:%02d:%02d\n",t.hour,t.min,t.sec);

56

57 dlclose(dp); /* 关闭共享库 */

58

59 exit(0); /* 成功返回 */

60

61 }

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

程序说明:

第8行: 包含标准输入输出头文件,因为程序中使用了printf,puts,fputs等标准输入输出函数,需要让编译器根据头文件中函数的原型,检查一下语法;

第10-11行: 包含动态链接库功能头文件CONTROL ENGINEERING China版权所有,并定义动态链接库名称;

第13-14行: 定义宏SHARED以便引用14行的头文件datetime.h中的动态函数说明;

第25行: 用dlopen打开SOFILE共享库,返回句柄dp;

第27-31行: 检测dp是否为空,为空则显示错误后退出;

第33行: 用dlsym取得getdate函数动态地址;

第35-40行: 如果dlerror返回值不为空CONTROL ENGINEERING China版权所有,则dlsym执行出错,程序显示错误后退出;

第42-43行: 执行getdate调用,输出当前日期;

第45行: 用dlsym取得gettime函数动态地址;

第47-52行: 如果dlerror返回值不为空CONTROL ENGINEERING China版权所有,则dlsym执行出错,程序显示错误后退出;

第54-55行: 执行gettime调用,输出当前时间;

第57行: 用dlclose关闭dp所指示的动态链接库;

第59行: 程序退出,返回0值。

2.2.2 编写维护文件

维护文件makefile内容如下:

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

1 # makefile : 纵横软件制作中心雨亦奇编写, 2001-06-28.

2

3 all : dy

4

5 DYSRC = dy.c

6

7 DYTGT = $(DYSRC:.c=.o)

8

9 %.o : %.c

10 cc -c $?

11

12 # 动态库应用示范程序

13 dy : $(DYTGT)

14 cc -rdynamic -s -o $@ $(DYTGT) -ldl

15

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

维护文件说明:

第3行: 定义所有需要维护的模块;

第5行: 定义源程序;

第7行: 定义目标文件;

第9-10行: 定义.o文件依赖于.c文件,维护代码为“cc -c 变动的源文件名”;

第13-14行: 定义dy依赖于变量DYTGT指示的值,维护代码中采用-rdynamic选项以指定输出文件为动态链接的方式,选项-s指定删除目标文件中的符号表,最后的选项-ldl则指示装配程序ld需要装载dl函数库。

2.2.3 运行make命令

运行make后将产生执行文件dy,运行后将产生如下类似信息:

动态链接库应用示范

当前日期: 2001-06-28

当前时间: 10:06:21

当删除my.so文件时CONTROL ENGINEERING China版权所有,将出现以下信息:

动态链接库应用示范

my.so: cannot open shared object file: 文件或目录不存在

3、小结

Linux创建与使用动态链接库并不是一件难事。

编译函数源程序时选用-shared选项即可创建动态链接库,注意应以.so后缀命名,最好放到公用库目录(如/lib,/usr/lib等)下面,并要写好用户接口文件,以便其它用户共享。

使用动态链接库www.cechina.cn,源程序中要包含dlfcn.h头文件,写程序时注意dl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值