动态库和静态库

目录

  • 一、动态库和静态库
  • 二、静态库
    • 2.1 生成静态库
    • 2.2 库搜索路径
  • 三、动态库
    • 3.1 生成动态库
    • 3.2 使用动态库
    • 3.3 运行动态库
    • 3.4 使用外部库
    • 3.5 库文件名称和引入库的名称
  • 四、动静态库及周边知识一览图

一、动态库和静态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。
在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)
动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。
操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

二、静态库

2.1 生成静态库

[root@localhost linux]# ar -rc libmymath.a add.o sub.o
ar是gnu归档工具,rc表示(replace and create)
查看静态库中的目录列表
[root@localhost linux]# ar -tv libmymath.a
rw-r–r-- 0/0 1240 Sep 15 16:53 2023 add.o
rw-r–r-- 0/0 1240 Sep 15 16:53 2023 sub.o
t:列出静态库中的文件
v:verbose 详细信息
[root@localhost linux]# gcc main.c -L. -lmymath
-L 指定库路径
-l 指定库名
测试目标文件生成后,静态库删掉,程序照样可以运行。

2.2 库搜索路径

从左到右搜索-L指定的目录。
由环境变量指定的目录。(LIBRARY_PATH)
由系统指定的目录。
/usr/lib
/usr/local/lib
在这里插入图片描述

三、动态库

3.1 生成动态库

shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
库名规则:libxxx.so
示例:
[root@localhost linux]# gcc -fPIC -c sub.c add.c [root@localhost linux]# gcc -shared -o libmymath.so *.o
[root@localhost linux]# ls add.c add.h add.o libmymath.so main.c sub.c sub.h sub.o

makefile:
在这里插入图片描述

3.2 使用动态库

编译选项
l:链接动态库,只要库名即可(去掉lib以及版本号以及后缀)
L:链接库所在的路径.

示例:
在这里插入图片描述

3.3 运行动态库

1、拷贝.so文件到系统共享库路径下, 一般指/usr/lib
2、更改 LD_LIBRARY_PATH
在这里插入图片描述
3、ldconfig 配置/etc/ld.so.conf.d/,ldconfig更新
在这里插入图片描述

3.4 使用外部库

系统中其实有很多库,它们通常由一组互相关联的用来完成某项常见工作的函数构成。比如用来处理屏幕显示情况的函数(ncurses库)
在这里插入图片描述
-lm表示要链接libm.so或者libm.a库文件

3.5 库文件名称和引入库的名称

如:libc.so -> c库,去掉前缀lib,去掉后缀.so.a

四、动静态库及周边知识一览图

在这里插入图片描述

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

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

相关文章

如何获取1688商品详情,价格,图片

1688是阿里巴巴旗下的B2B电子商务平台,主要面向国内的生产商和批发商。 通过获取到的跨境属性数据,可以了解到商品的跨境属性,例如商品的语言、原产地、适用场景等信息。这些数据可以帮助用户更好地了解商品的特点和质量,做出更明…

频谱测量---测量信号的功率

频谱测量 通道功率、带宽、均值频率、中位数频率、谐波失真。 使用 obw 和 powerbw 查找信号的 90% 占用带宽和 3-dB 带宽。计算功率谱的均值或中位数频率。估计给定频带上的功率。测量谐波失真。估计瞬时带宽、瞬时频率、频谱熵和谱峭度。 函数 功率和带宽 bandpowerBand…

【避雷选刊】Springer旗下2/3区,2个月录用!发文量激增,还能投吗?

计算机类 • 好刊解读 前段时间小编分析过目前科睿唯安数据库仍有8本期刊处于On Hold状态,其中包括4本SCIE、4本ESCI期刊(👉详情可见:避雷!又有2本期刊被标记“On Hold”!含中科院2区(TOP&…

研究前沿 | Science:单细胞测序助力绘制迄今最完善的灵长类动物前大脑发育图谱

引言 大脑发育的关键分子机制在啮齿动物中已有所了解,但在灵长类动物中仍然不清楚,这限制了研究者对高级认知能力起源和功能障碍的理解。此外,在包括人类在内的灵长类动物中,关于轴突投射路径上的丘脑区域和皮层区域多样化的早期分…

优思学院|如何利用六西格玛提升自己的大格局?

首先,我想说大格局并不仅仅是一个概念,更是一种生活态度。拥有大格局的人通常能够超越日常琐事,将目光投向更广阔的未来。他们不会被小事困扰,而是将注意力集中在更大的目标和使命上。拥有大格局的人常常具备卓越的领导力和判断力…

AIGC实战——自编码器(Autoencoder)

AIGC实战——自编码器 0. 前言1. 自编码器原理2. 数据集与模型分析2.1 Fashion-MNIST 数据集2.2 自编码器架构 3. 去噪自编码器3.1 编码器3.2 解码器3.3 连接编码器和解码器3.4 训练自编码器3.5 重建图像 4. 可视化潜空间5. 生成新图像小结系列链接 0. 前言 自编码器 (Autoenc…

Linux常用的解压命令

笑小枫的专属目录 整啥幺蛾子Linux tar命令tar命令的参数范例 Linux unzip命令语法参数 整啥幺蛾子 今天在linux解压一个文件,顺手就来tar -zxvf xxxx ,哦吼,爆竿了,套他猴子的。 好吧,承认 .gz文件解压多了&#xff…

基于springboot实现结合疫情情况的婚恋系统【项目源码】计算机毕业设计

基于springboot实现结合疫情情况的婚恋系统演示 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计,其不仅继承了Spring框架原来有的优秀特性,而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原…

电脑一直IP地址错误无法上网怎么办?

电脑出现IP地址错误,就将无法正常上网,那么,电脑一直IP地址错误无法上网怎么办呢?下面我们就一起来了解一下。 方法1. 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接,如果发现禁用,则将其启用…

理事长走进统信软件,深度探讨社区发展规划 | 理事长走进系列

10 月 19 日,龙蜥社区“理事长走进理事单位系列交流会”活动第二期开展,本期走进龙蜥社区副理事长单位——统信软件,会议共出席 17 人。会上回顾了统信软件过去在龙蜥社区的贡献和投入,并共同对未来的合作计划和诉求进行了深度讨论…

解决任务栏卡死

近期许多Win10用户反映在开机进入系统后遇到了任务栏卡顿、无法正常使用的问题,虽然桌面能够正常操作,但任务栏问题依然影响了用户的使用体验。 对“Windows资源管理器”进行重启 你可以尝试按下“CtrlAltDel”快捷键,打开“任务管理器”&a…

Android Studio 代码上传gitLab

1、项目忽略文件 2选择要上传的项目 3、添加 首次提交需要输入url 最后在push

通过流量分析查看业务系统运行和访问情况

在当今数字化时代,应用程序的运行和访问情况对于企业和组织来说至关重要。无论是在线销售平台、移动应用还是企业内部系统,应用的性能和可用性直接影响着用户体验、业务流程以及组织效率。因此,对应用的运行和访问情况进行全面分析和评估&…

使用阿里云服务器学习Docker

首先我这里选择的系统服务器是CentOS 7.9 64位 因为centos系统里面的安装指令是:yum,而非apt-get. yum install docker -y试着建立一个容器: docker run -d -p 80:80 httpd启动docker的守护进程: sudo systemctl start docker 查看Docke…

Linux常用的压缩命令

笑小枫的专属目录 少整花活,直接干货Linux gzip命令语法功能参数 Linux zip命令语法参数 少整花活,直接干货 本文的来源就是因为上篇文章Linux常用的解压命令,解压整了,顺手整理了一波压缩命令。 Linux gzip命令 减少文件大小有…

包装类、自动装箱、自动拆箱是什么?有哪些注意点?

1、包装类 Java中的数据类型总体上分为基本数据类型和引用数据类型。引用类型的数据可以通过对象的属性和方法来进行操作,但对于基本数据类型的数据,我们能不能像操作对象那样来操作呢?为了实现这个目标,Java为8种基本数据类型分…

axios1.5取消请求,中断请求的方法

给input的onchange绑定事件 引入axios,使用axios.CancelToken.source()创建标记 实例中,把cancelToken的值填上

群晖NAS:内网穿透、异地组网 frp

群晖NAS:内网穿透、异地组网 星空-远程访问(推荐高速) https://ip4.ink/ cpolar极点云(简单易用) https://www.cpolar.com/ 内网穿透矿神教程 https://imnks.com/4406.html 1、公网最好了,IPV4参考&…

在VM ware上安装ESXI,并ESXI上安装centos系统

在VM ware上安装ESXI,并ESXI上安装centos系统 文章目录 在VM ware上安装ESXI,并ESXI上安装centos系统1.ESXI8.0镜像下载:1.1. 下载ESXI镜像: 2.下载镜像后安装ESXI虚拟机2.1.创建虚拟机 3.开启ESXI的虚拟机开启安装ESXI操作系统4.…

深度学习 大数据 股票预测系统 - python lstm 计算机竞赛

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…