Linux--动静态库

news2024/11/25 12:36:42

1.背景知识

软硬链接:

软硬链接的创建

        软链接:ln -s 文件名 s_link 

结果:     

可以看到text1.txt和s_link->text.txt这两个文件地址,也就是inode编号是不一样的,且硬链接数都为1;

        硬链接:ln 文件名 h_link

结果:

这两个inode编号是一样的,且硬链接数一个为1,一个为2;为什么呢?

结果:软硬链接的本质区别为有没有inode编号,有的为软链接,没有的为硬链接,然后硬链接就是在指定目录下创建文件名和inode的映射关系,相当于起别名,而软链接相当于在windows下的快捷方式,引用计数为2的原因就是因为硬链接是拷贝了一份一模一样的文件,所以应用计数+1;删除硬链接的一份文件之后,引用计数-1,减到0之后删除文件,删除软连接不会造成文件删除,只是删除了快捷方式。这是软硬链接的区别。

2.动静态库的概念

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

静态链接: 将库中的相关代码复制进可执行程序中的过程。
动态链接: 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中。
链接的本质: 链接.o文件和.lib文件
库文件名称: 比如libc.so,去掉前缀lib和后缀.so,剩下的就是库名

3。动静态库的制作

静态库:就是将.c为后缀的文件转换为以.o为结尾的二进制文件,然后打包制作为静态库,将静态库封装为库文件。然后调用库文件。

制作过程:

然后打包二进制文件:ar -rc  libmymath.a *.o   ar 为归档工具。

打包完成之后发布:简单地说,就是把头文件和静态库组织起来,头文件放在include 下,如下:

然后就可以使用了。

动态库的制作:

将.c为后缀的文件改为二进制文件,但是需要加 -fPIC 指令,产生相对路径,是动态确定的,不存在绝对地址。最后一步就是对动态库进行发布,也就是将库文件和头文件进行组织打包。

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

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

相关文章

VR实景导航在医院内使用有哪些好处?

近年来,VR全景逐渐普及开来,被大众所熟知,而VR全景在医院的应用也是逐渐广泛起来,对于医院各种错综复杂的楼层,VR全景的VR实景导航功能,能够将患者代入一个三维、逼真的虚拟环境中,帮助患者快速…

企业数据库中了360勒索病毒怎么办,勒索病毒解密,数据恢复

随着网络技术的不断发展,越来越多的企业开始走向数字化办公,网络技术的发展给企业的生产运行提供了强有力的支撑。但随之而来的网络安全威胁也不断增加,数据安全成为众多企业关心的主要话题。近期,云天数据恢复中心的工程师接到很…

Pytorch网络模型训练

现有网络模型的使用与修改 vgg16_false torchvision.models.vgg16(pretrainedFalse) # 加载一个未预训练的模型 vgg16_true torchvision.models.vgg16(pretrainedTrue) # 把数据分为了1000个类别print(vgg16_true) 以下是vgg16预训练模型的输出 VGG((features): S…

apollo云实验:定速巡航场景仿真调试

定速巡航场景仿真调试 概述启动仿真环境仿真系统修改默认巡航速度 实验目的福利活动 主页传送门:📀 传送 概述 自动驾驶汽车在实现落地应用前,需要经历大量的道路测试来验证算法的可行性和系统的稳定性,但道路测试存在成本高昂、…

基于LDA主题+协同过滤+矩阵分解算法的智能电影推荐系统——机器学习算法应用(含python、JavaScript工程源码)+MovieLens数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据爬取及处理2. 模型训练及保存1)协同过滤2)矩阵分解3)LDA主题模型 3. 接口实现1)流行电影推荐2)相邻用户推荐3)相似内容推荐 相关其它博…

submit使用share buffer传参问题及解决办法

有个程序,因为处理逻辑复杂,时间长,所以启用了job。 本来是直接把耗时的核心函数 in background。 但是这种情况有个麻烦,不方便检查报错信息,只能用SM58监控。 所以改为了open job submit program。因为可以sm37查看…

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。 上传文件有两种场景:input控制上传和非input控件上传。 大多数情况都是input控件上传文件,只有非常少数的使用自定义的非input上传文件。 一、input控…

快手群控软件可同时控制多个账号!

随着社交媒体的普及,越来越多的人开始使用快手平台来分享自己的生活、展示才艺、开展商业活动等,然而,要想在快手上获得更多的关注和收益,需要投入大量的时间和精力,这时,快手群控软件应运而生,…

2023红帽论坛:探索数字化转型的下一步

作为全球领先的企业级开源解决方案提供商,红帽的一举一动在业界都备受关注。 近日,以“探索下一步”为主题,2023红帽论坛在北京盛大揭幕。 红帽全球副总裁兼大中华区总裁曹衡康在主题演讲中表示,智能创新并不是一个单纯依赖技术的…

d3dcompiler_47.dll是什么?d3dcompiler_47.dll缺失修复教程

d3dcompiler_47.dll丢失是一个比较常见的问题,尤其是在玩一些大型游戏或者使用一些图形处理软件时。这个问题可能会让你感到非常困扰,因为它可能会导致你的程序无法正常运行。但是,别担心,我在这里为你提供了四种解决方案&#xf…

【代码】【5 二叉树】d2

关键字: 先序遍历输出第k个元素、从右向左释放所有叶子结点、二叉树高度

硬件知识积累 CAN 总线接口

1. CAN 总线协议的介绍 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通…

微信小程序上传图片和上传视频的组件失效

微信小程序上传图片和上传视频的组件失效 今天公司的小程序展示图片和视频文字的页面上传图片组件突然失效,之前用的好好的,突然所有使用都都发现用不了,以为是代码出现问题,反复查了很久。换了一个openid居然就可以了&#xff0…

学Python,一个月从小白到大神?看你怎么学!

Python是一门超强大而且超受欢迎的编程语言。它被用在各种领域,比如网站开发、数据分析、人工智能和机器学习。学会Python会给你创造很多职业机会,所以绝对是值得一试的。 但你有没有过这样的梦想:一个月时间,从Python小白变成Py…

修改docker 版本的mysql 8.0 本机Navicat 连不上的问题

1.进入容器 docker exec -it xxxx bash 2.使用root账号登录mysql mysql -u root -p 3.查看当前加密方式 use mysql; SELECT Host, User, plugin from user; 我这是改过了,应该都是caching_sha2_password 4. 修改加密方式 ALTER USER root% IDENTIFIED WITH m…

大数据(十):数据可视化(二)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…

百度百科怎么创建?百科创建需要注意哪些(一文看懂品牌/企业/人物百科创建)

随着互联网的不断发展,许多企业或品牌都选择创建百度百科作为一种很好的展示方式。百度百科可以被视为一张网络名片,拥有它能够提高人物、企业、品牌的知名度和影响力。那么人物百科、企业百科、品牌百科到底怎么创建呢? 大家创建百科前建议先…

numpy中几种随机数生成函数的用法

一、np.random.rand() 该函数括号内的参数指定的是返回结果的形状,如果不指定,那么生成的是一个浮点型的数;如果指定一个数,那么生成的是一个numpy.ndarray类型的数组;如果指定两个数字,那么生成的是一个二…

日常踩坑-[sass]Error: Expected newline

在学习sass的时候,运行时发现报错 经过网上冲浪知道,原来在声明语言的时候 lang 不能声明为 sass ,而是 scss ,这就有点坑了 原因: scss是sass3引入进来的,scss语法有"{}“,”;"而sass没有,所以…

vue3+ts封装图标选择组件

概要 讲解在vue3的项目中封装一个简单好用的图标选择组件。 效果 第一步&#xff0c;准备图标数据 数据太多&#xff0c;大家去项目中看。项目地址https://gitee.com/nideweixiaonuannuande/xt-admin-vue3 第二步&#xff0c;页面与样式编写 <template><div>…