【Linux】关于静态库和动态库

为什么要使用库?

  • 使用库是为了保护自己的源代码,同时也为别人提供服务。

如何使用库:

  • 提供对应的库文件  
  • 提供与库文件对应的头(.h)文件

静态库与动态库

  • 静态库:是指程序在编译连接的时候把库的代码链接到可执行文件中,一般后缀是.a。
  • 动态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码,一般后缀是.so。

查找c标准静态库:

find /usr/lib -name libc.a

查找c标准动态库:

find /usr/lib -name libc.so*

如何给别人提供一个静态库:首先要自己提供一套方法,然后打包。

就以add函数和sub函数为例,说明如何给别人提供一个静态库:
 头文件代码:

<add.h>

#pragma once

#include <stdio.h>

int myadd(int x,int y);

<sub.h>
#pragma once

#include <stdio.h>

int mysub(int x,int y);

.c文件代码:

<add.c>
#include "add.h"

int myadd(int x,int y)
  {
     return x+y;
  }
<sub.c>
#include "sub.h"

int mysub(int x,int y)
  {
     return x-y;
  }

测试文件:

#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
   int a=10;
   int b=20;
   int c=myadd(a,b);
   printf("%d\n",c);
   int d=mysub(a,b);
   printf("%d\n",d);
   return 0;
}

使用gcc -c编译生成add.c和sub.c的目标文件add.o和sub.o

将add.o和sub.o一起打包生成静态库

最后将生成的静态库文件和头文件放在测试文件中,就可以使用该静态库了。

在使用时,还要用到一下几个命令:

gcc -I  //查找头文件
gcc -L  //查找库文件
gcc -lmath//-l是链接哪个库,后面紧跟的是库名
gcc -static//链接的静态库
gcc -ldd //查找可执行程序所链接的库

如何生成动态库?

还是以add和sub为例说明,如何生成动态库:

在代码和测试用例写好之后,使用

shared//表示生成共享库格式
fPIC//产生位置无关码(可以随意加载,与位置无关)

生成动态库:

使用动态库

动态库在使用之前需要设置环境变量:

export LD_LIBRARY_PATH=.  //设置环境变量
LD_LIBRARY_PATH是程序查找时的默认搜索路径

这里需要设置环境变量的原因是:

编译器只负责编译,执行代码是操作系统的任务,我们使用命令行写的查找路径只有编译器知道,并没有告诉操作系统,所以此时还需设置一下环境变量,否则系统使用默认的libc.so

为了验证我们是否成功使用动态库,此时还可以查看一下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值