Linux--动静态库的原理和使用详解

本文介绍了Linux系统中动态库与静态库的概念、原理以及使用方法。通过深入讲解动态库与静态库的区别和优劣势,帮助读者更好地理解并选择合适的库类型来进行软件开发。

动态库和静态库的概念

  1. 动态库(Dynamic Link Library,简称DLL):在运行时加载的库文件,不会被复制到可执行程序中,可以被多个程序共享使用。
  2. 静态库(Static Library):在编译时被链接到目标代码中的库文件,会被复制到可执行程序中,每个程序都有自己的副本。
    在这里插入图片描述

动静态库的使用和制作

具体步骤

  1. 创建源代码文件:首先,编写你的库的源代码文件,可以是一个或多个源码文件。这些文件包含了你想要封装在库中的函数、变量和其他定义。

  2. 编写头文件:创建一个头文件(通常以.h作为文件扩展名),用于存放库的接口声明。在头文件中定义公共的结构、函数原型和常量。

  3. 编译源代码文件:使用合适的编译器对源代码文件进行编译,生成目标文件(通常以.o作为文件扩展名)。例如,在Linux上可以使用gcc命令进行编译,如:gcc -c file1.c file2.c

  4. 创建静态库:将所有的目标文件打包成一个静态库文件(通常以.a作为文件扩展名)。使用ar命令创建静态库,如:ar rcs libyourlibrary.a file1.o file2.o。其中,'libyourlibrary.a’是静态库的名称,'file1.o’和’file2.o’是目标文件。

  5. 创建动态库:将所有的目标文件编译成一个动态链接库文件(通常以.so作为文件扩展名)。使用合适的编译器和链接器创建动态库,如:gcc -shared -o libyourlibrary.so file1.o file2.o。其中,'libyourlibrary.so’是动态库的名称,'file1.o’和’file2.o’是目标文件。

  6. 使用静态库:在编译可执行程序时,将静态库链接到程序中。例如,在使用gcc编译时添加’-L’选项指定库的路径,'-l’选项指定库的名称,如:gcc -o myapp main.c -L/path/to/library -lyourlibrary

  7. 使用动态库:在编译可执行程序时,可以使用静态方式链接动态库,也可以在运行时动态加载动态库。在使用gcc编译时添加’-L’选项指定库的路径,'-l’选项指定库的名称,如:gcc -o myapp main.c -L/path/to/library -Wl,-rpath,/path/to/library -lyourlibrary

实例操作

在这里插入图片描述
在这里插入图片描述

前章内容:重定向和文件缓冲

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建静态库

在这里插入图片描述

创建动态库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动静态库同时存在

在这里插入图片描述
在这里插入图片描述

动态库与静态库的区别

  1. 文件大小:动态库较小,静态库较大。
  2. 内存占用:动态库在运行时加载,不会占用程序的内存;而静态库会被完全加载到程序的内存中。
  3. 载入速度:动态库的载入速度较慢,因为需要在运行时进行加载和链接;而静态库的载入速度较快,因为已经被编译并链接到程序中。
  4. 更新与维护:动态库的更新只需替换库文件,不需要重新编译程序;而静态库的更新需要重新编译整个程序。
  5. 可重定位性:动态库可以在不同的系统上使用,因为动态链接器会解析库的依赖关系;而静态库需要重新编译适配不同的系统。

动态库的加载

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

动态库与静态库的选择

  1. 动态库适合需要共享使用的库,减少内存占用
  2. 静态库适合需要独立部署的程序,减少运行时的依赖
  3. 根据项目需求和系统环境特点综合考虑选择。

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

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

相关文章

优化金融展厅设计,细节提升客户体验与实用效能

“很赚钱”大部分公众对金融行业的第一印象,这足以见得金融行业在社会经济发展中的重要性,而为了更好的宣传和科普金融相关信息,金融展厅的设计和建设成为了重要措施,它能够充分展示金融机构的实力、品牌形象和服务优势&#xff0…

Jmeter使用BeanShell保存数据到文件

1、目的 在使用jmeter压测时,业务上下连贯,需要对一些编号进行关联操作。这里使用‘JSON提取器’将值提取出来,后面请求可以直接使用。其它业务想要使用就只能把值保存到文件,再使用文件做参数化了。 2、JSON提取器 提取请求值 提…

网站监控工具必要的功能

什么是网站监控 网站监控是持续跟踪网站在互联网上的性能和可用性,以确保其正常运行并提供良好的用户体验的过程,在当今的数字时代,一个表现良好的网站对公司的声誉至关重要,打开速度慢的网站会对用户体验产生负面影响&#xff0…

leetcode 347.前K个高频元素

题目 思路 1.统计每个数出现的次数:可以用HashMap。key为num,value为这个数出现的次数。 2.怎样返回HashMap中value最大的前k个key呢? 这里用优先队列的方法(本质是堆) 我们要维护一个小根堆。我们在堆中存储(key,…

APP信息收集思路总结(反代理,反虚拟机,反证书校验思路整理)

前言 本文是我在学习过程中的总结,希望可以被指导提议指正。 APP概况 app跟一个网站很像。 网站分为前端后端。 app就好像网站的前端一样,app不需要浏览器,而前端需要浏览器。 他们都需要服务器,也就是说,进行we…

实现登录拦截功能

1.4、实现登录拦截功能 温馨小贴士:tomcat的运行原理 当用户发起请求时,会访问我们像tomcat注册的端口,任何程序想要运行,都需要有一个线程对当前端口号进行监听,tomcat也不例外,当监听线程知道用户想要和…

#Linux(make工具和makefile文件以及makefile语法)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)make为编译辅助工具,解决用命令编译工程非常繁琐的问题 (2)在终端键入make即可调用make工具&#xff0…

huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)

组网需求 如 图 3-22 所示, SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络,且SwitchA 和 SwitchB 之间有较大的数据流量。用户希望 SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同VLAN 间互相通信。在两台 Switch 设备上…

攻防演练利器:六款蓝队开源防御工具特点剖析

实战化的攻防演习活动一般具有时间短、任务急等特点,作为防守方,蓝队需要在日常安全运维工作的基础上,从攻击者角度出发,了解攻击者的思路与打法,并结合本单位实际网络环境、运营管理情况,制定相应的技术防…

性能测试丨GreatSQL TPC-H 性能测试报告正式发布!

1、测试背景概述 本次测试针对GreatSQL开源数据库基于标准 TPC-H 场景的测试。 TPC-H(商业智能计算测试)是美国交易处理效能委员会(TPC,TransactionProcessing Performance Council)组织制定的用来模拟决策支持类应用…

抽取CLOB字段中XML的特定元素的VALUE值

在ORACLE数据库中,有时XML文件会被保存在CLOB字段中。 这时候,若是我们要获取此字段XML中特定元素的VALUE值,就需要用到xmltype 这个函数。 如下面的 XML文件,保存在 TABLE_A 的CLOB_K 字段,若是我们要获取其中的 Y…

C语言从入门到精通(第5版)-----读书笔记

第一章 C语言概述 1.1 C语言的发展史 1.1.1程序语言简述 1、机器语言 低级语言,又称二进制代码语言。一种使用0、1表示的二进制代码编写指令以执行计算机操作的语言。 特点:计算机可以直接识别,不需要进行任何翻译。 2、汇编语言 为了减…

RDMA内核态通信测试krping学习

krping模块是一个内核可加载模块,它实现了客户机/服务器ping/pong程序,这个模块仅仅为了测试内核rdma的API(单边的READ和Write;双边的SEND和RECEIVE)。该模块允许通过一个名为/proc/krping的/proc条目建立连接并运行pi…

ElasticSearch8 - 基本操作

前言 本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

服务器总是宕机问题记录

博主介绍: 22届计科专业毕业,来自湖南,主要是在CSDN记录一些自己在Java开发过程中遇到的一些问题,欢迎大家一起讨论学习,也欢迎大家的批评指正。 文章目录 背景调整总结 背景 2核2G的服务器,服务器安装了t…

计算机网络:物理层中的数字传输系统全景概览解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Django之Celery篇(三)

一、任务交给Celery Django任务交给Celery的方法和普通使用Celery任务的调用基本无区别,只是将执行代码的放到到View视图中 而获取结果,往往并不能把结果和第1次请求一起响应,若想获取结果是通过第2次请求获取结果 代码如下: from django.http import HttpResponsefrom …

华为ensp中vrrp虚拟路由器冗余协议 原理及配置命令

CSDN 成就一亿技术人! 作者主页:点击! ENSP专栏:点击! CSDN 成就一亿技术人! ————前言————— VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议&#xff0…

[数据集][目标检测]高质量铁路轨道缺陷检测数据集VOC+YOLO格式1050张6类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1050 标注数量(xml文件个数):1050 标注数量(txt文件个数):1050 标注…

【机器学习】基于变色龙算法优化的BP神经网络分类预测(SSA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】变色龙优化算法(CSA)原理及实现 2.设计与实现 数据集: 数据集样本总数2000 多输入多输出:样本特征24&#xff…