linux学习之二十四---静态库的创建和使用

库的创建和使用

1.Linux库的概念

库是一种软件组建技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,提高程序的编译速度,实现代码重用,使程序易于升级。

Windows系统本身提供并使用了大量的库,包括 静态链接库(.lib文件)和动态链接库(.dll文件)。类似的,Linux操作系统也使用库。Linux系统中,通常把库文件存放在/usr/lib或/lib目录下。Linux库文件名由前缀lib、库名以及后缀3部分组成,其中 动态库以.so作为后缀,而静态库通常以.a作为后缀

在程序中使用静态库和动态库时,它们的载入顺序不一样的。静态库的代码在编译时就拷贝到应用程序中,因此当多个应用程序同时引用一个静态库函数时,内存中将会调用函数的多个副本。这样的优点是节省编译时间。而动态库是在程序开始后调用库函数时才被载入,被调用函数在内存中只有一个副本,并且动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

2.静态库的创建和使用

(1)在一个头文件中声明静态库所导出的函数。
(2)在一个源文件中实现静态库所导出的函数。
(3)编译源文件,生成可执行代码。
(4)将可执行代码所在的目标文件加入到某个静态库中,并将静态库拷贝到系统默认的存放库文件的目录下。

以下通过实例来说明如何创建和使用静态库。mylib.h中存放的是静态库提供给用户使用的函数的声明,mylib.c实现了mylib.h中声明的函数。

3.示例代码

mylib.h(函数的声明)
//mylib.h

#ifndef _MYLIB_H_
#define _MYLIB_H_

void welcome();
void outstring(const char *str);

#endif 

mylib.c(函数的实现)

//mylib.c
#include"mylib.h"
#include<stdio.h>

void welcome()
{
      printf("Welcome to libmylib\n");
}

void outstring(const char * str)
{
       if(str!=NULL)
         printf("%s",str);
}

测试代码:test.c

//#include"mylib.h"
#include<stdio.h>

int main()
{
    printf("create and use library!\n");
    welcome();
    outstring("It's successful!\n");
}

4.创建静态库及编译过程:

(1).编译生成mylib.c的目标文件

gcc -o mylib.o -c mylib.c

(2).将目标文件加入到静态库中,静态库为libmylib.a

ar rcs libmylib.a mylib.o             (也可以向libmylib.a中加入其他多个目标文件,生成目标文件和mylib.o方法相同)

(3).将静态路拷贝到Linux库目录下(/usr/lib)

cp myliblib.a /usr/lib/libmylib.a   (提示权限不够的可以试试sudo cp myliblib.a /usr/lib/libmylib.a)

(4).接下来就使用test.c测试静态库

gcc test.c -o test -lmylib

在编译test.c生成可执行程序使,必须加入静态库。

注意:“-lmylib”中-l为选项,mylib为库名。mylib是“libmylib.a”的中间部分,Linux下约定所有库都以前缀lib开始,静态库以.a结尾,动态库以.so结尾。在编译的时候无需加入前缀与后缀。

(5).运行test

./test

(6).运行结果:

pc@ubuntu:~/linux_lan/lib_test$ ./test
create and use library!
Welcome to libmylib
It's successful!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值