Linux——静态库 共享库

1.库文件


1).库文件 库是一组预先编译好的方法的集合; Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64) 库的头文件放在/usr/include

2).库的分类 静态库:libxxx.a(命名规则) 共享库:libxxx.so(命名规则)
3).准备文件:

//add.c
int add(int x,int y)
{
return x+y;
} 
//max.c
int max(int x,int y)
{
return x>y?x:y;
} 
//main.c
#include <stdio.h>
#include "foo.h"
int main()
{
int a=5,b=10;
printf("a+b=%d\n",add(a,b));
printf("max=%d\n",max(a,b));
return 0;
} 
//foo.h
int add(int x,int y);
int max(int x,int y);

2.静态库


(1).静态库的生成及使用

1)先将需要生成库文件的所有.c文件编译成.o文件;(目标文件)

2)创建静态库(使用ar命令) ar crv libxxx.a xxxx.o xxx.o c:创建库 r:将方法添加到库中 v:显示过程


(2)静态库的使用 gcc -o main main.c   -L. -lxxx -L:指定库的存储位置 -l:指定库的名称(不需要前面的lib和扩展名.a)
例如:gcc -o main main.c -L. -lfoo
(3).静态库的缺点: 当你同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多个副本.而且在程序文件自身中也有多份同样的副本,这将消耗大量宝贵的内存和磁盘空间;

3.共享库


(1)将所有的.c文件编译成目标文件.o (2)将所有目标文件打包生成共享库: gcc -shared -fPIC -o libxxx.so xxx.o xxx.o (3)共享库的使用: gcc -o main main.c -L路径 -l库名

共享库执行的时候会出错,找不到对应的共享文件:比如libfoo.so;
注意:共享库必须要放到标准路径下: sudo mv libxxx.so /usr/lib 补充一个命令: 查看使用了那些共享库:ldd main

4.静态库与共享库的区别


共享库如果10个应用程序共享,那么磁盘上只有一份共享的库文件,而且运行加载时在内存中只加载了标记了的这一份库文件; 而静态库,就是这10个应用程序都包含了这个库文件,那么10份的库文件都放在磁盘上了(占用磁盘空间),而且运行加载的时候占用内存空间(10份库文件都要加载); 共享库便于升级. 

静态库的好处是在目标机器上运行程序的时候,就不再依赖于这个机器的空间,因为已经将方法都包含进来了;而共享库就是只有一份共享,比较节省空间,但是坏处就是运行的时候,这个主机上必须有这个库文件,没有程序就会运行失败;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx部署前端教程

目录 一、前言二、部署三、注意四、参考 一、前言 一般来说现在的软件项目&#xff0c;都是分用户端以及管理端的&#xff0c;并且是前后端分离的&#xff0c;这里我来记录一下部署两个前端的教程。 部署前端之前需要的准备工作是部署springBoot后端程序&#xff0c;这里我do…

数据结构基础:双链表结构、实现

继续和颦颦学C语言呀.......> 双链表的结构 这里的head 为头节点&#xff0c;是‘哨兵位’&#xff0c;实际不存储任何有效的数据 它的存在是为了遍历环链表避免死循环 双链表的实现 typedef int LTDataType; typedef struct ListNode { struct ListNode* next; //指针保存…

2024/4/6 DS18B20温度传感器

DS18B20温度传感器简介 DS18B20是一种常见的数字温度传感器&#xff0c;其控制命令和数据都是以数字信号的方式输入输出&#xff0c;相比较于模拟温度传感器&#xff0c;具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围&#xff1a;-55C 到 125C 通信接口&#…

通讯录----顺序表版本

1.通讯录的实现逻辑 对于通讯录&#xff0c;我们做的无非就是初始化&#xff0c;销毁。添加联系人数据&#xff0c;修改联系人数据&#xff0c;删除联系人数据&#xff0c;查找联系人数据&#xff0c;展示联系人数据&#xff1b; 这个不就和我们的顺序表的逻辑如出一辙吗&…

docker安装nacos,单例模式(standalone),使用mysql数据库

文章目录 前言安装创建文件夹"假装"安装一下nacos拷贝文件夹删除“假装”安装的nacos容器生成nacos所需的mysql表获取mysql-schema.sql文件创建一个mysql的schema 重新生成新的nacos容器 制作docker-compose.yaml文件查看网站 前言 此处有本人写得简易版本安装&…

SQLite 查询优化器概述(九)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite中的隔离(八&#xff09; 下一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 1. 引言 本文档概述了查询规划器和优化器如何 用于 SQLite 工作。 给定一个 SQL 语句&#xff0c;可能有几十个、几百…

C++——位图和布隆过滤器

在C中&#xff0c;哈希这种思想的应用场景有很多&#xff0c;位图就是其中的一种。 位图 位图&#xff1a;位图是一种哈希思想的产物&#xff0c;可以通过它来对数据进行快速的查找的方法&#xff0c;在位图中&#xff0c;有2种状态来表示在或者不在&#xff0c;即1/0。 位图…

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 4

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件…

vue快速入门(八)绑定方法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-if与button响应回顾事件方法写法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

115.不同的子序列

给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit" 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种可以从 s 中…

Coding and Paper Letter(八十八)

系列重启之CPL。 1 Coding: 1.一个Python库用来分析城市路网的工具箱&#xff0c;城市形态分析工具。 Madina 2.SkyPilot&#xff1a;在任何云上运行 LLM、AI 和 Batch。 通过简单的界面即可实现最大程度的节省性能、最高的 GPU 可用性和托管执行。 skypilot 3.探索美国卫…

寻找排序数组中的最小值

题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2]若旋转 7 次…

企业信息化建设之MCS/WCS的知识点精讲

0、背景: 近日,再做售前方案的时候,碰到WMS和WCS的对接的场景,有同事质疑MCS和WMS不会对接,其实大家在日常工作中碰到的都是一套系统, MCS和WCS都是指仓储控制系统,不过它们的应用场景和功能有所不同。 在制造业中,MCS系统主要负责全厂物料的搬送路径指派和管理…

whatsapp 语音通话基本实现(二)

Whatsapp VoiceCall 客户端通过websocket连接到服务器&#xff0c;客户端发起语音通话请求&#xff0c;并且完成必要的协商之后&#xff0c;就可以直接将语音数据发送给服务器&#xff0c;服务器接收到对方的语音数据之后也会通过websocket将语音数据转发给客户端。 websocke…

RuoYi-Vue若依框架-在框架内用颜色选择器,页面显示色块

在用若依框架进行二次开发的时候写到自己的一个模块&#xff0c;其中涉及到颜色&#xff0c;我就想着是手动输入还是采用颜色选择器呢&#xff0c;考虑到后续涉及到另一个字段编码于时就采用了颜色选择器&#xff0c;选择完的颜色显示的是十六进制的颜色选择器&#xff0c;这时…

Transformers in Vision:A Survey 阅读笔记

ACM上的一篇综述&#xff0c;讨论Transformer在CV上的应用。 摘要&#xff1a; Among their salient benefits,Transformers enable modeling long dependencies between inputsequence elements and support parallel processing of sequence as compared to recurrent networ…

深度剖析:网络安全中的红蓝对抗策略

红蓝对抗 红蓝对抗服务方案 在蓝队服务中&#xff0c;作为攻击方将开展对目标资产的模拟入侵&#xff0c;寻找攻击路径&#xff0c;发现安全漏洞和隐患。除获取目标系统的关键信息&#xff08;包括但不限于资产信息、重要业务数据、代码或管理员账号等&#xff09;外&#x…

【移动安全】对webview漏洞的一些分析

这次分析的app如下&#xff1a; 打开发现该app发现需要登录界面&#xff1a; 拖进jadx看一下&#xff0c;先来看一下AndroidManifest.xml文件 发现有两个类是导出&#xff0c;再来分析这两个类 这个RegistrationWebView类利用webview.loadUrl进行加载网页 java public class…

Vue基础知识:声明式导航——跳转传参,声明式导航有哪几种路由传值方式,查询参数传参语法,动态路由传参语法,两者的区别

在跳转路由时&#xff0c;进行传值 1.查询参数传参 1.语法格式如下&#xff1a; to"/path?参数名值" 2.对应页面组件接收传递过来的值 $route.query.参数名 案例演示&#xff1a; 此时点击“跳转并携带参数”这个链接&#xff0c;就会跳转到search这个页面并携带参…

SpringCloud学习(10)-SpringCloudAlibaba-Nacos服务注册、配置中心

Spring Cloud Alibaba 参考文档 Spring Cloud Alibaba 参考文档 nacos下载Nacos 快速开始 直接进入bin包 运行cmd命令&#xff1a;startup.cmd -m standalone 运行成功后通过http://localhost:8848/nacos进入nacos可视化页面&#xff0c;账号密码默认都是nacos Nacos服务注…