没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
大家都知道,在 WINDOWS 系统中有很多的动态链接库(以.DLL 为后缀的文件,DLL 即
Dynamic Link Library)。这种动态链接库,和静态函数库不同,它里面的函数并不是执行
程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个 执行程序
间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青
睐。那么,在 LINUX 系统中有无这样的函数库呢? _
答案是肯定的,LINUX 的动态链接库不仅有,而且为数不少。在/lib 目录下,就有许多
以.so 作后缀的文件,这就是 LINUX 系统应用的动态链接库, 只不过与 WINDOWS 叫法不
同,它叫 so,即 Shared Object,共享对象。(在 LINUX 下,静态函数库是以.a 作后缀的)
X-WINDOW 作为 LINUX 下的标准图形窗口界面,它本身就采用了很多的动态链接库 (在/u
sr/X11R6/lib 目录下),以方便程序间的共享, 节省占用空间。著名的 APACHE 网页服务器,
也采用了动态链接库,以便扩充程序功能。你只需将 PHP 动态链接库拷到其共享目录,修
改一下配 置,APACHE 就可以支持 PHP 网页了。如果你愿意,可以自己编写动态链接库,
让 APACHE 支持你自己定义的网页格式。这就是动态链接的好处。 _
1、LINUX 下动态链接库的创建 _
在 LINUX 系统下,创建动态链接库是件再简单不过的事情。只要在编译函数库源程序时加
上-shared 选项即可,这样所生成的执行程序即为动态链接库。从某种意义上来说,动态链
接库也是一种执行程序。按一般规则,程序名应带.so 后缀。下面举个例子说说。 _
我准备编写两个函数,一个用于查询当前日期 getdate,一个用于查询当前时间 gettime,并
将这两个函数存于动态链接库 my.so 中。为此,需要做以下几项工作。 _
1.1 编写用户接口文件 datetime.h,内容如下(每行前面的数字为行号): _
----------------------------------------------------------------------
1 /* datetime.h : 纵横软件制作中心雨亦奇编写, 2001-06-28. */
2
3 #ifndef __DATETIME_H
4
5 #define __DATETIME_H
6
7 /* 日期结构 _ */
8 typedef struct
9 {
10 int year;
11 int mon;
12 int day;
13 }DATETYPE;
14
15 /* 时间结构 _ */
16 typedef struct
17 {
18 char hour;
19 char min;
20 char sec;
21 }TIMETYPE;
22
23 /* 函数原型说明 _ */
24
25 #ifdef SHARED
26 int (*getdate)(DATETYPE *d);
27 #else
28 int getdate(DATETYPE *d);
29 #endif
30
31 #ifdef SHARED
32 int (*gettime)(TIMETYPE *t);
33 #else
34 int gettime(TIMETYPE *t);
35 #endif
36
37 #endif
38
----------------------------------------------------------------------
这个用户接口文件中,先定义了日期与时间结构,接着定义一下函数的原型。动态函数与
静态函数的原型说明不同的是,动态函数应使用(*函数名)的形式,以便引用其指针。若要
引用文件中的动态函数说明,用户应该定义一下 SHARED 宏,这样才能使用。 _
1.2 编写 getdate.c,源程序如下: _
----------------------------------------------------------------------
1 /* getdate.c : 纵横软件制作中心雨亦奇编写, 2001-06-28. */
2
3 #include "time.h "
4 #include "datetime.h "
5
6 int getdate(DATETYPE *d)
7 {
8 long ti;
9 struct tm *tm;
10
11 time(&ti);
12 tm=localtime(&ti);
13 d-> year=tm-> tm_year+1900;
14 d-> mon=tm-> tm_mon+1;
15 d-> day=tm-> tm_mday;
16 }
17
----------------------------------------------------------------------
在 getdate 函数中,先调用 time 取得以秒计的系统时间,再用 localtime 函数转换一下时间
结构,最后调整得到正确的日期。 _
1.3 编写 gettime.c,源程序如下: _
----------------------------------------------------------------------
1 /* gettime.c : 纵横软件制作中心雨亦奇编写, 2001-06-28. */
2
3 #include "time.h "
4 #include "datetime.h "
5
6 int gettime(TIMETYPE *t)
7 {
8 long ti;
9 struct tm *tm;
10
11 time(&ti);
12 tm=localtime(&ti);
13 t-> hour=tm-> tm_hour;
14 t-> min=tm-> tm_min;
15 t-> sec=tm-> tm_sec;
16 }
17
----------------------------------------------------------------------
gettime 函数与 getdate 函数相仿,先用 time 函数取得以秒计的系统时间,再用 localtime 函
数转换一下时间结构,最后返回当前的时间(不需调整)。 _
1.4 编写维护文件 makefile-lib,内容如下: _
----------------------------------------------------------------------
1 # makefile-lib : 纵横软件制作中心雨亦奇编写, 2001-06-28.
2
3 all : my.so
4
5 SRC = getdate.c gettime.c
6
7 TGT = $(SRC:.c=.o)
8
9 $(SRC) : datetime.h
10 @touch $@
11
12 %.o : %.c
13 cc -c $?
14
15 # 动态函数库(my.so)生成 _
16 my.so : $(TGT)
17 cc -shared -o $@ $(TGT)
18
----------------------------------------------------------------------
编写维护文件的目的,在于方便程序员维护程序,尤其是维护比较大的工程项目。一个素
质良好的程序员应该学会熟练地编写维护文件 makefile。定义了文 件间的依赖关系后,一
旦源文件发生变化,仅需 make 一下,其目标文件维护代码会自动执行,从而自动更新目
标文件,减少了许多工作量。注意: 每行维护代码必须以 TAB(跳格键)开始,不是的话
剩余11页未读,继续阅读
资源评论
华豫康
- 粉丝: 4
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
- C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
- C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码
- 6693eeb8d683458a07938615fba9e68f.apk
- C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
- C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码
- C#,子集和问题(Subset Sum Problem)的算法与源代码
- mongodb 数据库基本操作
- Linux操作系统基础教程
- Linux操作系统相关习题集
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功