linux中的静态库和共享库

库:库是二进制文件,是源代码文件的另一种表现形式,是加了密的源代码;是一些功能相近或者相似函数的集合体

库的使用:

头文件--包含了库函数的声明

库文件--包含了库函数的代码实现

注意:库不能单独使用,只能作为其他执行程序的一部分完成某些功能,也就是说只能被其他程序调用才能实现

库分为静态库和共享库

静态库:

静态库是一些目标代码的集合,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分。以.a为文件后缀名。

命名:

前缀:lib 库名称:自定义 后缀:.a

静态库的制作:

1 把.c文件编写成.o文件

gcc -c t1.c t2.c

2使用ar 命令将.o文件打包成.a文件

ar rcs libx.a(库名字) t1.o t2.o

静态库的使用:

gcc -o m m.c -I/.(头文件所在目录) -L./(库文件所在目录) -lxt(l+库文件名)

如图:

t.h头文件内容:

这是t1.c t2.c 内容:

这是m.c文件:

执行者两步制作库:

使用:

动态库:

动态库在程序编译时并不会被连接到目标代码中,而是程序运行时才被载入。

命名:

lib+名字+.so

动态库的制作:

1 把.c文件编写成.o文件

gcc -fpic -c t1.c t2.c

2将.o文件打包成.so文件

gcc -shared t1.o t2.o -o libx.so

动态库的使用:

gcc -o m m.c -I/.(头文件所在目录) -L./(库文件所在目录) -lxt(l+库文件名)

注意:1:动态库文件在编译的时候,连接器需要使用参数-L找到库文件所在路径

2:在执行的时候,是加载器ldd根据动态库的路径进行加载的,与编译的时候使用的-L指定的路径无关。

cannot open shared object file: No such file or directory报错:

当我们使用我们制作的动态库时会报以上错误

我们用命令 ldd

解决一:输入: sudo cp libx.so /usr/lib

解决二:在家目录下创建一个lib目录,然后用 cp libx.so ~/lib 把文件拷贝到lib里去

然后打开.bashrc添加export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/lib

打开终端输入: . ~/.bashrc 就可以使用了

相关推荐
云栖梦泽1 小时前
从 IMX415 摄像头驱动理解 Media Controller 框架
linux·开发语言·c++·嵌入式硬件
纳兰青华1 小时前
CentOS Stream 9 下载与安装完全指南:为什么它是当前最稳妥的选择?
linux
白白白飘1 小时前
【8】补充与拓展:Langchain的联网搜索Agent,使用Tavily工具
服务器·网络·langchain
草邦设计开发团队_媒体资源平台1 小时前
Linux 稳定常驻启动 PHP 队列,服务器重启自动恢复
linux·服务器·php·队列执行
想你依然心痛1 小时前
嵌入式容器:Docker与BalenaOS在边缘设备上的实践——容器运行时与OTA
运维·docker·容器
竣达技术1 小时前
NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机
运维·服务器·电脑
Lottie20261 小时前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化
章老师说1 小时前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
国科安芯2 小时前
基于ASM1042S2S的箭载通信网络抗辐射加固方案研究
服务器·网络·嵌入式硬件·fpga开发·架构·信号处理
wbs_scy2 小时前
仿 muduo 高并发服务器项目:实现 Any 通用容器并理解 std::any
运维·服务器