linux下的静态库和动态库

意义:为了避免代码的重写率,我们可以将已经写好的代码形成一个库,当我们再次用到的时候可以直接调用,而不是重新去写,即“站在巨人的肩膀上”。

linux下有两种库:

一、静态库:

准备工作:

//swap.c
int swap(int *x,int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
    return 0;
}
//main.c
#include <stdio.h>

int main()
{
    int x=0,y=1;

    swap(&x,&y);
    printf("x=%d  y=%d\n",x,y);

    return 0;
}

1 将我们需要的函数生成一个.o 文件 

root# gcc -c swap.c   这时候当前目录下会有一个swap.o文件

2 通过.o文件形成静态库命

root#  ar  -rsv  libSWAP.a  swap.o

即:ar -rsv 静态库名称 目标文件1 目标文件2(即可以吧多个.o文件添加在一个库中)

静态库命名方式:以lib开头+库功能描述+.a

3 静态库在程序中的使用

直接使用静态库中的函数,但最好声明函数

4 编译程序

root#  gcc main.c  -L/root(静态库路径)  -l SWAP(静态库名称)  -o  exe

或root# gcc main.c libSWAP.c -o exe

二、动态库(共享库):

1 也是以.o文件建立动态库

2 命令:

root# gcc -shared  -fPCI  -o  libSWAP.so swap.o

root#  gcc -shared  -fPCI  -o  动态库名称 目标文件1 目标文件2

动态库命名方式:以lib开头+库功能描述+.so

3 动态库在执行程序时去到动态库中调用函数,所以我们应将动态库放到指定目录中,

  动态库存放路径必是系统库存放路径# mv libswap.so /usr/lib

4 编译源程序 gcc main.c -l库名称 -o exe

root#  gcc main.c -l SWAP -o exe

需要注意的是:对于静态库和动态库,其本质的区别在于:

静态库:库中的代码在编译过程中就已经载入其中,因此主函数程序内容很大,浪费空间。

动态库:库中的代码在编译过程中只是做了一下引用,在程序运行时才载入内存的,因此其主函数内容很少。

另外,对于ar -rsv等用法可以查找ar[-] 的用法,以及参数选项,这里不多做解释


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值