Linux 动静态库

一、动静态库

1、库的理解

库其实是给我们提供方法的实现,如上面的对于printf函数的实现就是在库中实现的,而这个库也就是c标准库,本质也是文件,也有对应的路径

2、区别

      静态库是指编译链接时,把库文件的代码全部加入到可执行文件中

      动态库:在程序执行时由运行时链接文件加载库,只加载所需要的,节省空间大小

       Linux中:.so(动态库)    .a(静态库)     windows :     .dll(动态库)    .lib(静态库)

        在Linux中只会安装动态库,而静态库需要自己安装

由于gcc编译时默认使用的是动态库,完成的是动态链接,如要实现静态链接就要添加-static

3、命名规则 

  libname.so.xxx,name为c就是c库,c++就是c++库

4、 库的作用

方法的实现就在库当中,库就是将源文件(.c)经过一定的翻译,然后打包,封装然后只提供一个所需的文件,而将其他源文件隐藏

具体的软件的实现  = 头文件中的方法声明 + 库文件提供的方法实现 + 具体代码

二、动静态链接

先讲一个故事方便理解

1、动静态链接

动态链接就是当可执行程序自己完成不了时,就需要跳转到库中,执行库中的方法,执行完后再进行返回

特点:拷贝的是在哪里实现,不拷贝具体的实现方法;动态库只需要一个;可执行程序依旧依赖库;一旦缺失动态库,会影响很多的可执行程序无法正常运行

编译器使用静态库进行静态链接时,会将静态库的所有方法实现拷贝到可执行程序中,使该程序不再依赖静态库

注意点:

  1.如果我们没有静态库,但就要-static  ,是不行的

  2.如果没有动态库,但有静态库,而且gcc能找到,这个是可以的; 因为gcc默认优先动态链接,       而-static的本质就是改变优先级,使所有链接要求变为静态链接,并且只能适配一次

3.所有的链接都是静态链接和动态链接混合使用的

2、优缺点

动态库:优:因为是共享库,可以有效的节省资源(磁盘空间,内存空间,网络空间等)

              缺:一旦缺失,导致各个程序都无法运行

静态库:优:不依赖库,程序可以独立运行

              缺:体积大,比较消耗资源

3、ldd和file 指令

ldd 可以查询文件依赖的动态库    方法:ldd + 文件名

file 可以查询可执行程序是动态链接还是静态链接   方法: file 文件名

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端canvas——赛贝尔曲线

曲线之美,不在于曲线本身,而在于用的人。 所以就有了这期赛贝尔曲线。 新规矩,先上个GIT。 效果图 开局一张图,代码全靠编。 代码 画骨 先想着怎么画一个心形吧,等你想好了,就知道怎么画了。 首先就还…

Cyberchef基础概念之-循环语句操作-Jump/Label

在本专栏的前面的文章介绍了fork,merge,subsection,register等多种概念来解决实际场景的问题。本文将介绍的Jump/Label的操作类似于编程语言中的for和while的功能,相信在学会使用jump操作后,将有助于解决更为复杂的数据处理问题。 本文将详细的介绍该操…

每日OJ_力扣+牛客_另类加法_不用加号的加法

目录 力扣面试题 17.01. 不用加号的加法 解析代码 牛客另类加法 解析代码 力扣面试题 17.01. 不用加号的加法 面试题 17.01. 不用加号的加法 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2提示: a, b 均可能…

OpenSSL学习笔记及在项目中的使用

OpenSSL官方命令手册:OpenSSL commands - OpenSSL Documentation 参考教程: 操作:OpenSSL的基本使用教程(一)_openssl.exe使用教程-CSDN博客 操作:Linux和Shell回炉复习系列文章总目录 - 骏马金龙 - 博客园 (cnblog…

【MR】现代机器人学-时间最优时间缩放

MR章节目录 第2章 配置空间 第3章 刚体运动 第4章 正向运动学 第5章 速度运动学与静力学 第6章 逆向运动学 第7章 闭链运动学 第8章 开链动力学 第9章 轨迹生成 9.1 定义 9.2 点到点轨迹 9.3 多项式通过点轨迹 9.4 时间最优时间缩放 第10章 运动规划 第11章 机器人控制 第12章 …

20 Python常用内置函数——eval()

内置函数 eval() 函数用来计算字符串的值,在有些场合也可以用来实现类型转换的功能。除此之外,eval() 也可以对字节串进行求值,还可以执行内置函数 compile() 编译生成的代码对象。 print(eval(b35)) print([eval(8), type(eval(8))]) # 把…

Keras入门:一维线性回归问题

目录 一、一维变量线性回归 1. 数据生成 2. 建立训练模型 3. 作图 4. 完整代码 一、一维变量线性回归 1. 数据生成 import keras import numpy as np import matplotlib.pyplot as plt #matplotlib inline xnp.linspace(0, 100, 30) #0~100之间,生成30个数 y…

构建现代数据湖

现代数据湖是一半数据仓库和一半数据湖,对所有事情都使用对象存储。使用对象存储来构建数据仓库是通过 Open Table Formats OTF) 实现的,例如 Apache Iceberg、Apache Hudi 和 Delta Lake,这些规范一旦实现,就可以无缝…

PHP基础语法-Part1

脚本格式 PHP脚本以<?php开头&#xff0c;以?>结尾&#xff1b; PHP语句以分号结尾&#xff08;;&#xff09; PHP是解释型语言&#xff1b; 输入和输出 获取用户的输入&#xff1a; $input readline("input:"); echo $input; echo "input:";…

Github 2024-07-26开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目2TypeScript项目2C++项目2HTML项目1Python项目1C#项目1Lua项目1JavaScript项目1Vue项目1C项目1免费编程学习平台:freeCodeCamp.org 创…

为什么很多人在一定年龄后的肥胖无法避免

人体在营养均衡状态的时候&#xff0c;是不容易长胖的&#xff0c;且身体也远比一般人更健康些&#xff0c;但想要一直维持身体的这种健康均衡的状态&#xff0c;不仅生活上要很有规律&#xff0c;饮食上也要营养均衡才行。但以如今社会的快节奏生活而言&#xff0c;基本没有人…

计算机毕业设计-程序论文-基于 Java 的高校教资报名系统的设计与实现

本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件都有可私要 项目源码&#xff0c;请关注❥点赞收藏并私信博主&#x…

软考-软件设计师(4)-计算机网络与安全:OSI七层、子网划分、网络安全控制技术、网络安全协议、网络安全威胁、对称与非对称加密等高频考点

场景 软考-软件设计师-计算机网络与信息安全模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 OSI/RM七层模型 注意各层的主要功能,特别是表示层负责数据的加密、压…

AI 正在取代工作岗位、ChatBot 进入厌倦期、向量数据库崛起,人工智能现状报告有这些重要发现!...

作者 | Echo Tang&GPT 出品丨AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; 百度的无人驾驶“萝卜快跑”已经在武汉大面积推广&#xff0c;在部分城市进行小量的试运行&#xff0c;以低廉的价格直接卷翻滴滴、出租车司机&#xff0c;让人们热议“五年、十…

7月23日JavaSE学习笔记

异常&#xff1a; 程序中一些程序处理不了的特殊情况 异常类 Exception 继承自 Throwable 类&#xff08;可抛出的&#xff09; Throwable继承树 Error&#xff1a;错误/事故&#xff0c;Java程序无法处理&#xff0c;如 OOM内存溢出错误、内存泄漏...会导出程序崩溃 常见的…

研0 冲刺算法竞赛 day22 P1928 外星密码

P1928 外星密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;递归处理&#xff0c;分类处理 代码&#xff1a; #include<iostream> #include<stack> using namespace std; #include <cstring> char copl[20005];string handle() {int …

全网最详细!! Linux 安装、配置教程

一、下载安装包 首先去官网下载VMware最新版本&#xff0c;以及发行版CentOS -7&#xff0c;懒得下载的可以私信我&#xff0c;我给你发包 其中&#xff0c;CentOS&#xff08;Community Enterprise Operating System&#xff09;是一个基于Linux的开源操作系统&#xff0c;它是…

华为OD机试 - 停车场车辆统计 - 贪心算法(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华…

微服务注册中心

目录 1.微服务的注册中心 1.1 注册中⼼的主要作⽤ 1.2 常⻅的注册中⼼ 2.nacos简介 2.1 nacos实战⼊⻔ 2.2.1 搭建nacos环境 2.2.2 将商品微服务注册到nacos 3.服务调⽤Ribbon⼊⻔ 3.1 Ribbon概述 3.1.1 什么是Ribbon 3.1.2 Ribbon的主要作⽤ 3.2.2 ⼯程改造 4.服务…

多区域DNS以及主从DNS的搭建

搭建多域dns服务器&#xff1a; 搭建DNS多区域功能&#xff08;Multi-Zone DNS&#xff09;主要是为了满足复杂网络环境下的多样化需求&#xff0c;提高DNS服务的灵活性、可扩展性和可靠性。 适应不同网络环境&#xff1a; 在大型组织、跨国公司或跨地域服务中&#xff0c;网…