LINUX系统中动态链接库的创建与使用
2008-02-23 07:25:37来源:互联网 阅读 ()
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(跳格键)开始,不是的话make时将出错。
本维护文件第1行是注释行,以#号开头;文件第3行定义所有需要维护的函数库;第5行定义相关源程序文件;第7行定义目标文件;第9-10行说明所有源程序依赖于datetime.h头文件,并有相应维护代码,即touch一下,更新一下源文件的时间;第12-13行定义.o文件依赖于相应的.c文件,并指定了维护代码,即用cc编译一下;第16-17行定义共享库my.so依赖的目标文件,维护代码中用-shared编译选项,以生成动态链接库 my.so。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:LINUX动态链接库高级应用
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash