动态库和静态库的制作

一.库的制作

1.1什么是库文件?

库是一个二进制文件,是将xx.c(main)文件编译生成的二进制文件,库分为动态库和静态

window:

​ 静态库 xxx.lib

​ 动态库 xxx.dll

linux:

​ 静态库 libxxx.a

​ 动态库 libxxx.so

二.静态库

2.1静态库概念

静态库是lib库名.a格式的文件,如果在编译的时候需要使用静态库,会将静态库中的函数编译到可执行程序中,

可执行程序的体积比较大,效率会比较高。静态库更新后,需要重新编译可执行程序,否则可执行程序中拿不到最新的库中的函数(更新麻烦)。

2.2静态库的制作

gcc -c add.c -o add.o //只编译不连

ar -cr libadd.a add.o //ar制作静态库的命令, -c 创建静态库 -r把函数放到库中

2.2.1静态库如何使用

-l  :链接库 (link)
-L  :指定库的路径 (Library)
-I  :指定头文件的路径 (include)

2.2.2静态库实例代码

add.h

#ifndef __ADD_H__
#define __ADD_H__

int add(int ,int);

#endif

add.c ====>libadd.a

int add(int a,int b)
{
    return (a+b);
}

main.c

#include <head.h>
#include <add.h>
int main(int argc,const char * argv[])
{
    int sum;
    sum = add(100,200);
    printf("sum = %d\n",sum);
    return 0;
}

三.动态库

3.1什么是动态库

动态库在使用的时候只是将库中的函数的符号表放到了可执行程序中,所以可执行程序的体积比较小,在可执行程序运行的时候还需要依赖动态库文件。所以动态库的效率比较低,但是动态库更新方便。所以动态库在系统中用的地方非常的多。动态库又叫共享库

3.2动态库的制作

gcc -c -fPIC add.c -o add.o //将add.c只编译不链接生成add.o -fPIC忽略文件位置

gcc -shared add.o -o libadd.so //将add.o编译生成共享库

gcc -fPIC -shared add.c -o libadd.so //直接将add.c编译生成libadd.so库文件

3.3动态库的使用

-l  :链接库 (link)
-L  :指定库的路径 (Library)
-I  :指定头文件的路径 (include)

3.4基于动态库可执行程序执行的过程

3.4.1方式1:

 export LD_LIBRARY_PATH=../lib/
// 指定库的路径,只对当前终端生效

3.4.2方式2:

​ 将自己的编译好的libadd.so库放到系统的库的路径下即可。

​ 

3.4.3方式3:

修改系统的库的配置文件

sudo vi /etc/ld.so.conf.d/libc.conf 

​ 

​ 执行sudo ldconfig让配置文件生效

4.3.5动态库的实例

add.h

#ifndef __ADD_H__
#define __ADD_H__

int add(int ,int);

#endif

add.c ====>libadd.so

int add(int a,int b)
{
    return (a+b);
}

main.c

#include <head.h>
#include <add.h>
int main(int argc,const char * argv[])
{
    int sum;
    sum = add(100,200);
    printf("sum = %d\n",sum);
    return 0;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值