linux(动静态库)

news2024/12/23 15:09:16

目录:

          1.文件时间的概念

          2.动态库和静态库

          3.如何制作动静态库

--------------------------------------------------------------------------------------------------------------------------------

1.文件时间的概念

 我们现在就开始学习这三个时间分别表示了什么?????

1.Assess   : 文件最近被访问的时间

但是在较新的linux内核中,Access时间不会被立即更新,而是有我们一定的时间间隔,OS才会自动更新时间!!!

2.Modify :最近一次修改文件内容的时间

3.Change: 最近一次修改文件属性的时间

当我们修改文件内容的时候,是有可能修改文件的属性,比如:可能会更改文件的大小属性

----------------------------------------------------------------------------------------------------------------------------

Makefile与gcc会根据时间问题,来判定源文件和可执行程序谁更新,从而指导系统哪些源文件需要被重新编译!!!!

---------------------------------------------------------------------------------------------------------------------------

2.动态库和静态库

ldd  命令

C标准库是我们真正意义上,在OS上存在的文件。

 

 上面我们看到的全是动态库,那我想看看静态库呢???

 

动态库和静态库之间的差别!!!!

动态库和静态库相比,静态库本质上是把库当中的程序相关的内容直接拷贝进目标代码的,静态库是把我们所依赖的代码拷贝进你的可执行程序里

我们在C语言上代码时,除了自己写的循环,判断这些自己的代码,还会调用C语言的printf、scanf这些C语言的库,这些库函数实际在你编译时,通过链接库的方式

如果通过静态库,就把库当中对应的模块拷贝到你的可执行程序里,所以你的可执行形成体积比较大,但一旦形成你将不在依赖库

动态库它只是把你要关联的函数,关联起来在库里面,不会进行任何拷贝的行为,当你的可执行程序要执行库函数代码时,直接跳转到库当中就可以执行了

------------------------------------------------------------------------------------------------------------------------------

3.如何制作动静态库

如果我不想使用系统当中的哪些库,想自己制作一个动态库或静态库!!!

先制作一个静态库

我们在C/C++中,为什么有时候写代码的时候,有时候是 .h里放上声明,  .c/.cpp放入实现??为什么要这么设计呢???

因为我们要制作库!!! .h当中只有声明,没有实现,是方便我们制作库的

开源软件直接声明和定义放在一起,这直接不需要生成库,直接把源文件给别人了

如果我今天不想把源文件给别人,设计库来完成

库的存在一方面是方便使用还有一方面是私密(我不想把我的源文件给它,只想把库给他),将来给别人让别人用的时候,给的就是一套头文件和库文件,通过库把我们的源文件进行了封装保护。

-------------------------------------------------------------------------------------------------------------------------------

 

 add函数和sub函数各一组方法的声明和实现,我们现在怎么用呢???

 

 我们今天想看到的不仅仅是上面的这样子,如果没有库,我应该怎么编译呢???

如果我们想把我们的方法给别人用

1.提供源代码 + 头文件

2.将我们所以的 .o文件打包,形成库文件+头文件的声明

 那么我如何将所有的 .o 打包成静态库呢???

用  ar  -rc 命令

ar -tv  查看静态库

 我们静态库有了,可是静态库是二进制的,别人看不懂啊,别人怎么知道你的库文件里有什么方法!!!

 静态库我有了,别人怎么用呢???

 

所以我们会发现,我们在命令行当中想找到这个库,需要加  -L  -l这样子的选项

可是,我们之前写的C/C++语言代码,也用了库,为什么没有指明过这些项呢???

原因是因为之前的库在系统的默认路径下(/lib64,/usr/lib 、/usr/include  等)编译器是能够识别这些路径的

如果我不想带这些选项,我是不是就可以把我的头文件,和库拷贝到默认路径下。

没问题,不过严重不推荐!!!!

上面的过程也就是一般软件的安装过程

 到目前为止,别人就可以把我们打包好一个库文件+一套头文件用起来了

--------------------------------------------------------------------------------------------------------------------

我们现在来搞一搞动态库的制作了

 

 

 

解决 系统找不到我们的动态库的方法有3种

第一种就是,直接将我们的动态库拷贝到我们的系统路径下,不过不推荐

第二种,我们有一个环境变量 LD_LIBRARY_PATH (默认是没有配置的) 这个环境变量是指明我的程序启动之后库的搜索路径

 

这个环境变量我导入这个路径下了,不过下一次登入的时候,需要重新再导入!!

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

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

相关文章

AI百科:一个开启人工智能时代的综合性平台

无论是人工智能的快速发展还是AI技术在各个领域的广泛应用,都让我们对智能未来充满了期待和好奇。随着科技的进步,发现了一个好网站,一个集合了丰富AI工具和产品介绍的综合性网站—— AI百科。 在人工智能(AI)领域的快…

【实用工具 - vscode】实现Linux服务器的远程操控

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【计算机工具】 ✒️✒️本篇内容:vscode的下载安装,常见插件及详细安装方法,插件停用及卸载,vscode快捷键 …

如何将文件制作成二维码

日常生活和工作中,为了让大家更方便的查阅文件,可将文件生成二维码,打印在通知书、会议要求,或是直接用“二维码”分享。通过草料二维码可以将多种类型的文件快速生成文件二维码,微信扫码查看即可查看和下载文件。 ● …

项目风险管理的四个阶段,你了解多少?

项目风险管理是项目管理的一部分,目的是保证项目总目标的实现。 风险管理包括风险识别、风险估计、风险解决和风险监控。风险管理贯穿在项目中的每个环节,在项目的生命周期中监控风险是非常重要的手段。 风险管理包含四个阶段: 1、风险识别…

从需求分析到功能扩展:打破瓶颈,构建智能采购管理软件

在当今快速发展的商业环境下,采购管理已成为企业发展的关键环节之一。如何在采购管理中快速响应市场需求、协调供应链、提高效率和降低成本,是摆在企业面前的一个巨大挑战。因此,打破瓶颈,构建智能采购管理软件成为了迫切的需求。…

内蒙古自治区住房和城乡建设分析及解决方案

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘 要:为深入贯彻落实《国务院办公厅关于印发新能源汽车产业发展规划(2021—2035年)的通知》(国办发 ﹝2020﹞39号)、《国家发展改革委等部门关于进一步提升…

一文读懂如何将 Rancher 下游集群升级到 Kubernetes v1.25

介 绍 最初在 Kubernetes v1.21 中被弃用的 PodSecurityPolicy API,已经在 Kubernetes v1.25 中被完全删除。由于 API 被移除,你无法在 Kubernetes v1.25 集群中创建、编辑或查询 PodSecurityPolicy 资源。此外,由于其准入控制器已被移除&am…

JAVA-类隔离机制

一、类加载: 1、类加载:Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码加载到内存,发给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的…

Windows 上安装和启动 Nacos 2.2.2 最新版本

文章目录 前言版本声明本地启动1. 下载 Nacos2. 开启鉴权配置3. 持久化数据库4. 启动 Nacos5. 启动测试 联系我 前言 本文旨在为您详细介绍如何安装和启动 Nacos 2.2.2 的最新版本,以及为 youlai-mall 开源商城版本的升级做好准备工作。 版本声明 名称版本操作系…

企业工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…

【IP技术】IP地址详细解释

大家知道如何查看本机的 IP 吗?这个问题,即便是没有专业学过计算机的人,只要折腾过电脑,重装过系统,大多都会知道答案:在 Windows 下是 ipconfig,在 linux 下是 ifconfig。 在 Windows 下输入 i…

Activity的onCreate方法是怎样被调用的?

Activity的onCreate方法是怎样被调用的? 按前面源码分析的介绍,在Activity的onCreate方法中,添加如下的log: android.util.Log.i("wztest", "Activity onCreate", new Exception());重新编译后,…

移动云COCA架构,重新定义下一代云

当前,算力已经成为 全球科技竞争的焦点 为此,移动云重磅发布 「移动云COCA(Compute on chip Architecture)软硬一体片上计算架构」 以下简称移动云COCA架构 以此打造国家级自主可控的 高性能算力底座 带动国产化智算产业成熟…

10款实用高效的网页版PS插件推荐!

PS是设计界适用范围广、应用次数多的基础性设计工具,PS的功能之强大,常常令新手望而却步。其实,为了对PS的功能进行补充和优化,这些年来陆续开发出了许许多多的功能性PS插件,在网页版 PS ——即时设计上有很多PS插件使…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间,获得超一亿用户,成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线,其AI性能和完善程度再度提升,深受用户和…

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容,说是敏捷混合题型占到了 50%,但是这次318的考试,敏捷题占了大半,都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒,题目读不懂,或者觉得4个选项都不对或…

深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

xxs跨站之原理分类及攻击手法(25)

xss跨站达到原理&#xff0c;危害和特点 他和语言没有太大关系&#xff0c;它大部分都是属于一个前端的漏洞&#xff0c;搭建一个简易的php网站存在xss跨站漏洞 访问这个网站&#xff0c;x1&#xff0c;就输出1&#xff0c; 如果我们把x<script>alert(1)</script&g…

图解LeetCode——24. 两两交换链表中的节点

一、题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 二、示例 2.1> 示例 1&#xff1a; 【输入】head [1,2,3,4] 【…

Linux——gdb调试器

目录 前言&#xff1a; 二.gdb定义及指令&#xff1a; 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试&#xff1a; 调试指令1&#xff1a;l指令(小写L) run指令&#xff1a;运行程序&#xff0c;相当于VS中的直接运行不调试——可简化输入r break指令&#xff1…