静态函数库的制作和使用

C语言的函数库是多组经过验证的常用函数的集合,编写C语言程序时使用库函数,既可以提高程序运行效率,又可以提高编程质量,使用方法如#include 和#include。

根据使用库函数时,函数库加载时机的差异,将函数库分为静态函数库和动态函数库,具体差异是:C语言程序如果使用静态函数库的函数,那么整个函数库的代码都会和C语言程序一起编译成可执行代码,程序的体积会膨胀;如果使用动态函数库的函数,则C语言程序只会和函数库文件名以及函数名一起编译成可执行代码(不编译函数代码),运行时去查找函数库文件和函数体,程序的体积基本不变。

简单概括就是,静态函数库是“以空间换时间”,增加程序体积,减少运行时间,如果静态函数库发生改变,则整个程序必须重新编译,因为函数库被整合到了最终可执行代码中;动态函数库则是“以时间换空间”,增加运行时间,减少程序体积,如果动态函数库发生改变,程序无须重新编译,因为函数库没有整合到最终可执行代码中。

Linux中静态函数库表示为”libxxx.a”,windows中后缀名为”.lib”;Linux中动态函数库表示为”libxxx.so”,windows中后缀名为”.dll”。函数库中存放内容包括:(1)函数名称,(2)函数目标代码(二进制),(3)重定位信息(链接需要)等。

1 静态函数库的制作和使用

静态函数库的制作步骤可以用下图来描述,具体包括

(1)  编写函数的.c文件(例如add.c、sub.c、mul.c和div.c)

(2)  编写Makefile,然后make,实现函数的编译和归档入库

函数的编译:使用gcc –c 只编译不链接函数.c文件,分别生成函数的目标文件(例如add.o、sub.o、mul.o和div.o)。

函数的归档入库:使用ar -rc libxxx.a  $(objects) 将目标文件归档入库。

(3)  编写头文件(例如ku.h),声明静态函数库中的所有函数,目的是kumain.c函数#include头文件后,可以调用相应的函数,至此,完成函数库的制作。

1.1 静态函数库的制作示例
     
示例的内容是建立静态函数库libstatic.a,库中包括add、sub、mul和div函数,然后在kumain.c函数中引用这4个函数,实现两个整数的加减乘除,整个文件的结构是

(1)  编写函数的.c文件

编写4个函数文件add.c、sub.c、mul.c和div.c

//  add.c
float add(int a, int b)
{
 return (a+b);
} 

// sub.c
float sub(int a, int b)
{
return (a-b);
} 

//  mul.c
float mul(int a, int b)
{
return (a*b);
} 

//  div.c
float div(int a, int b)
{
return (a/b);
} 

(2)  编写头文件

//  ku.h
float add(int a, int b);
float sub(int a, int b);
float mul(int a, int b);
float div(int a, int b);

(3)  编写Makefile

###  Makefile for static func lib
objects = add.o sub.o mul.o div.o

libstatic.a : $(objects)
     ar -rc libstatic.a $(objects)

add.o : add.c
    gcc -c add.c

sub.o : sub.c
    gcc -c sub.c

mul.o : mul.c
    gcc -c mul.c

div.o : div.c
    gcc -c div.c

clean :
    rm libstatic.a $(objects) 

(4)  使用make编译.c文件,生成.o文件,归档.o文件到函数库libstatic.a中,完成静态函数库的制作。

1.2 静态函数库的使用

(1)    编写kumain.c,调用libstatic.a中的add、sub、mul和div函数

//  kumain.c
#include <stdio.h>
#include "ku.h" 

int main (void)
{
int a,b;
a = 10;
b = 3;

printf("a = %d.\nb = %d.\n",a,b);
printf("static a+b = %f.\n",add(a,b));
printf("static a-b = %f.\n",sub(a,b));
printf("static a*b = %f.\n",mul(a,b));
printf("static a/b = %f.\n",div(a,b));

return 0;

} 

(2)    使用gcc kumain.c –o kumain.o –L ./ku2 –lstatic 编译kumain.c文件,运行./kumain.o查看运行结果,成功。

时间: 2024-10-26 13:50:17

静态函数库的制作和使用的相关文章

动态函数库的制作和使用

>>>>>>接静态函数库的制作和使用>>http://www.cnblogs.com/hfxin2001-eric-daddy/p/5809010.html 2 动态函数库的制作和使用 动态函数库的制作步骤可以用下图来描述,具体包括 (1)  编写函数的.c文件(例如add.c.sub.c.mul.c和div.c) (2)  编写Makefile,然后make,实现函数的编译和归档入库 函数的编译:使用gcc –c add.c -fPIC只编译不链接函数.c

[国嵌攻略][073][静态函数库设计]

外部函数 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别 系统调用在Linux内核中位于核心态,而函数库是由工程师提供位于用户态 函数库分类 函数库按照链接方式可以分为静态函数库和动态函数库 存放位置 Linux应用程序使用的主要函数库均存放于/lib,/usr/lib目录下,其中以*.so.*方式命名的是动态函数库,而以*.a方式命名的是静态函数库. 静态链接库的特点 程序所要用到的库函数代码在链接时全部被拷贝到程序中.如果有多个进程在内存中同时运行,并且使用了

6.静态函数库设计

程序设计中,离不开函数的使用.Linux应用程序设计中需要外部函数.主要是由函数库和系统调用来提供. ? 两者区别: 系统调用的是在Linux内核里的,函数库是在用户空间的. 函数库分类: ????函数库按照链接方式可分为:静态链接库和动态链接库. ? Linux应用程序使用的这些函数库主要存在于/lib目录和/usr/lib目录下,其中采用*.so.*方式命名的是动态函数库,而以*.a方式命名的是静态函数库. /lib: /usr/lib: 静态链接库的特点: 程序所用到的库函数代码在链接时全

静态库与动态库的制作

1.相关知识 (1).不管是制作静态库还是动态库,都得对.o文件进行打包: (2).在/lib64目录下,静态库文件.a,动态库文件.so 2.静态库 (1).gcc -c add.c    ------> 生成add.o文件,其中通过参数(-c): (2).静态库由命令ar创建:  ar  -cr  add.a  add.o   (3).静态库的编译有两种方法:   a:gcc test.c -o test -L. add.a     //每次都得在编译时加上-L. 静态库文件: b.将.a文

Linux下静态库和动态库的制作与使用

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Times New Roman", serif } h2 { margin-top: 14.0pt; margin-right: 0cm; margin-bottom: 14.0pt; margin-left: 28.8pt;

8、静态函数库设计

函数库分类函数库按照链接方式可分为 1.静态链接库 2.动态链接库 函数库 -存放位置 Linux应用程序使用的主要函数库均存放于/lib, /usr/lib目录下,其中采用*.so.*方式命名的是动态函数库,而以*.a方式命令的是静态函数库. 静态链接库-特点1.程序所要用到的库函数代码在链接时全部被copy到程序中.2.导致的问题:如果有多个进程在内存中同时运行,并且使用了相同的库函数,那么就会有多份拷贝,这就是对空间的浪费. 使用静态库-编译选项 1.Linux下进行链接时 默认是链接动态

静态库的制作详解

静态库的制作 1   静态库的存在形式: .a 和.framework 动态库的存在形式:.dylib 和.framework 2   静态库和动态库的区别: 静态库在链接的时,会被完整的复制到可执行文件中,被使用多次,就由多份拷贝. 动态库则不会被复制,只有一份,程序运行时,动态加载到内存,系统只加载一次,多个程序共用 但是:程序中如果使用自己的动态库是不允许上架的. 3   使用静态库,可以保护核心代码,将MRC的项目打包成静态库,就可以在ARC环境下直接使用. 4   静态库的特点: .a

C库的制作

1.库的概念:库是一种可执行的二进制形式: 2.分类: 1>静态库 ①.在程序编译时会被连接到目标代码中: ②.程序运行时不再需要该静态库: ③.体积较大: 2>动态库/共享库 ①.在程序编译时不会被连接到目标代码中,而是在程序运行时才被载入内存中: ②.在程序运行时需要动态库存在: ③.代码体积较小: 3.库的制作: 1>静态库的制作: ①.创建静态库的源代码: testlib.c int fun(int a){ return a * a: } ②.将静态库的源代码编码成.O文件 gc

静态函数库和动态函数库

静态函数库是在编译链接时,把库文件代码全部加入到可执行文件中,因此生成的文件比较大,而运行时也就不需要库文件了.Linux中静态函数库的后缀名一般为".a",windows中为".Lib": 动态函数库是在编译链接时没有把库文件代码加入到可执行文件中,而是将要调用的函数所在文件的和该函数在文件中的位置等信息链接进目标程序.Linux中动态函数库的后缀名一般为".so",windows中为".dll".