库的制作——静态库/动态库(共享库)

1 篇文章 0 订阅
1 篇文章 0 订阅

一、C库————函数库——————存万能使用的函数

1、概念:本质上是一种可执行代码的二进制形式,可以被操作系统载入内存执行(注意:windows和Linux的本质不同,故二者库的二进制是不兼容的)

2、分类: 静态库————动态库(共享库)

3、区别:两个库的代码载入的时刻不同

静态库:在编译时会被连接到目标代码中

程序运行时将不再需要该静态库

代码体积较大

动态库:在程序运行的时候链接

程序运行时动态库也要存在

代码体积较小

可以被多个程序同时使用,且只需要在内存中运行一个动态库就行了

4、注意事项:

要分辨你的库是共享的还是静态的

不要让两个程序同时加载同一个静态库

共享库是具有共享属性的临界资源,允许多个程序同时加载

二、静态库

1、特点:在编译时期链接,程序运行时已经加载完毕,于函数库无关,故方便移植,但比较浪费空间和资源

2、创建静态库

1>创建一个库源文件---->fun.c

2>将动态库的路径加入到配置文件中---->gcc -c fun.c -o fun.o

3>将.o文件制作成静态库文件---->ar crs libfun.a fun.o(lib+库名)

4>编写测试代码----》test.c

5>编译test.c的同时链接上制作好的静态库---->gcc test.c -Wall -o test -L. -lfun(-L.:库的路径 -l:链接库名)

6>运行---->./test

三、动态库

1、特点:动态库会把一些库函数的链接载入推迟到程序运行的时期

可以实现进程之间的资源共享

将程序升级变得简单一些

代码载入完全由程序员控制

2、制作动态库

1>创建一个库源文件---->fun.c

2>将库源文件编译成.o文件---->gcc -c fun.c -Wall -fPIC(fPIC:创建与地址无关的编译程序)

3>将.o文件制作成动态库文件---->gcc fun.o -o libfun.so -shared -fPIC

4>编写测试代码---->test.c

5>编译---->gcc -o test test.c -L. -lfun -Wall

注意:出现./test: error while loading shared libraries: libfun.so: cannot open shared object file: No such file or directory

故要让系统找到这个库----将动态库载入到系统中

解决方法:1>方法一--推荐

:直接将库文件拷贝到/lib 或者 /usr/lib

2>方法二--墙裂推荐

1>将动态库的路径加入到配置文件中

sudo vim /etc/ld.so.conf

2>在新的一行,添加动态库的绝对路径

/home/farsight/shared/IO/day3/dt_lib

3>执行命令:

sudo ldconfig

3>重新开始流程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值