linux下静态库和动态库的创建和使用


Linux通常把库文件存放在/usr/lib或/lib目录下。
Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。
下面通过一个例子来说明:mytestlib.h种存放的是静态库(或者动态库)提供给用户使用的函数的声明,mytestlib.c实现了mytestlib.h种声明的函数。

头文件:mytestlib.h
#ifndef  _MYTESTLIB_H_
#define _MYTESTLIB_H_

int Add(int a,int b);
int Sub(int a,int b);

#endif

源文件:mytestlib.c

#include "mytestlib.h"

int Add(int a ,int  b)

{

return a+b;

}

int Sub(int  a,int  b)

{

return a-b;

}

1.静态库的创建和使用

a.编译mytestlib.c生成目标文件:gcc -o mytestlib.o -c mytestlib.c

b.将目标文件加入到静态库中:ar rcs libmytestlib.a mytestlib.o
c.将静态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.a /usr/lib/libtestmylib.a 
d.编写一个调用库函数的测试程序mytest.c:
#include "mytestlib.h"
int main()
{
int a=5;
int b=3;
printf("hello ,welcome to  mytest!\n");
printf("%d+%d=%d\n",a,b,Add(a,b));
printf("%d-%d=%d\n",a,b,Sub(a,b));
return 0;
}
e.使用静态库编译:gcc -o mytest mytest.c -lmytestlib

f.运行可执行程序mytest:   ./mytest

hello ,welcome to  mytest!

5+3=8

5-3=2

2.创建生成动态库

a.编译生成动态库

   gcc mytestlib.c –fPIC –shared –o libmytestlib.so

由以上命令生成动态库libmytestlib.so

–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,

而不能达到真正代码段共享的目的。

–shared:指明编译成动态库。 

b.使用动态库编译命令:

gcc mytest.c –L . –l mytestlib –o mytest

     –L:指明动态库所在的目录

      -l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test。

c.   查看程序使用动态库情况:

     ldd mytest

    注: ldd 测试可执行文件所使用的动态库 

d.将动态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.so  /usr/lib/libtestmylib.so

e.运行可执行程序mytest:   ./mytest

hello ,welcome to  mytest!

5+3=8

5-3=2





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值