日志三个时间,动静态库的建立与使用

news2024/10/6 6:05:26

文章目录

  • 日志时间
    • Modify
    • Change
    • Access
  • make与g++
    • ldd
    • file
    • 静态库
    • 动态库
  • 静态库
    • 静态的制作
    • 静态库的使用
  • 动态库
    • 动态库的制作
    • 动态库的使用

日志时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLnwdrih-1666968472555)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028153401112.png)]

Modify

  1. 最近修改文件内容的时间
  2. 在一定条件下,修改文件内容时,可能修改文件属性:文件大小属性改变了

Change

最近修改文件属性的时间

Access

  1. 文件最近访问的时间
  2. 访问文件的方式有很多种,如果每种访问都要记录,那么OS会非常忙碌,因此在最新的Linux内核中,Access时间不会立即更新,而是有一定时间间隔,OS会自动更新这个时间

make与g++

  1. makefileh和g++会根据时间问题,来判断源文件与可执行文件谁需要更新。
  2. 以时间为界限,make前.c文件的modify的时间是在可执行文件modify前的,一旦我们修改了.c文件,它的modify就在可执行文件的modify后面,Make就是通过这种方式判断文件是否更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pD5KNt8-1666968472563)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028154820975.png)]

  1. 库也是磁盘文件,也有它的inode,是一种二进制文件

  2. 一套完整的库:库文件本身,头文件,说明文档。

  3. 制作库:方便使用(声明定义分离),保护源码

  4. 一般库分为2种:动态库和静态库

  5. linux中 如果是动态库:以.so作为后缀;如果是静态库:以.a为后缀

  6. 库文件的命名:libxxx.so /libyy.a…

    库的真实名:去掉前缀lib,去掉.so/.a-…剩余的部分,也是就xxx和yy

  7. g++默认的编译方式是动态链接,如果想静态链接 加static[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrYLl8Eq-1666968472566)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028183509513.png)]。

ldd

  1. 显示一个文件使用的动态库
  2. 通过静态链接库因为拷贝是不显示的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ei7JHxz-1666968472568)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028163104731.png)]

file

显示一个文件是动态链接还是静态链接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isbaCGkR-1666968472570)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028163514279.png)]

静态库

  1. 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中—静态链接。静态链接会导致文件非常大,但是程序运行的时候将不再需要静态库。

动态库

  1. 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

  2. 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码

  3. 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking )

  4. 动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

静态库

执行文件的形成需要目标文件(.o),因此如果我们只提高目标文件和库文件,会有效的保护源码

静态的制作

  1. 通过ar指令,实现归档
ar -rc  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2fwfI1oX-1666968472572)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028201023553-1666959024607-1.png)]

  1. 通过 ar -tv 显示库中的内容

    ar -tv
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhXiaM7g-1666968472573)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028202006185-1666959607266-3.png)]

静态库的使用

   g++ -o $@ $^ -Ixx -Lyy -l zz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-93z9kGWq-1666968472574)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028212250187.png)]

在这里插入图片描述

动态库

动态库的制作

 g++  -shared -o $@ $^
  g++ -fPIC -c $<

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5HGymTl-1666968472576)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028215428271.png)]

动态库的使用

g++ -o $@ $^ -I./lib -L./lib -lmymath
  1. 动态链接的特性,导致编译器的编译和加载器的启动都需要确定动态库的路径,且二者存放路径的地方是不同的。

  2. 编译器在编译的时候就可以显示的告知,加载器需要在LD_LIBRARY_PATH中添加路径,不过这是一次性的,一旦该bash死亡就没有了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QpGsBDZj-1666968472577)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028223232869.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCEYHH1J-1666968472578)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028223307867.png)]

  1. 长久加载器生效

在/etc/ld.so.conf.d/bit.conf添加库路径

最后ldconfig刷新一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4lAwGQG-1666968472579)(./%E5%8A%A8%E9%9D%99%E6%80%81%E5%BA%93%E5%BB%BA%E7%AB%8B.assets/image-20221028224724873.png)]

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

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

相关文章

实验2:Numpy手写多层神经网络

引言 这个作业的目的是给你们介绍建立&#xff0c;训练和测试神经系统网络模型。您不仅将接触到使用Python包构建神经系统网络从无到有&#xff0c;还有数学方面的反向传播和梯度下降。但在实际情况下&#xff0c;你不一定要实现神经网络从零开始(你们将在以后的实验和作…

【数据结构与算法】详解快排

目录一、快排的定义及思路二、快排的代码实现一、快排的定义及思路 快排就是快速排序&#xff0c;是通过不断比较和移动交换来进行排序&#xff0c;相当于冒泡排序的一种升级。 其基本思想是&#xff1a; 分而治之&#xff0c;也就是把一组数组分成两个独立数组&#xff0c;再对…

【初学者入门C语言】之结构体(十一)

个人主页&#xff1a;天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 &#x1f4ac; 刷题网站&#xff1a;一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com) 特别标注&#xff1a;该博主将长期更新c语言内容&#xff0c;初学c语言的友友们&#xff0c…

【树莓派不吃灰】使用中经常看到的安装命令 wget、rpm、yum、dpkg、apt-get

目录1. 前言2. Linux系统两种主流软件包2.1 rpm包2.2 deb包3. 解决软件依赖问题 —— yum、apt3.1 yum3.2 apt 和 apt-get4. wget 网络文件下载工具5. 总结❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-10-28 ❤️❤️ 本篇…

设计模式之备忘录模式 - 简书

备忘录模式是一种行为设计模式&#xff0c; 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 解决方案 我们刚才遇到的所有问题都是封装 “破损” 造成的。 一些对象试图超出其职责范围的工作。 由于在执行某些行为时需要获取数据&#xff0c; 所以它们侵入了其…

ipv6学习笔记221029

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写 ipv6的长度有128位, ipv4的长度是32位 ipv6以冒号:分隔 , ipv4以点.分隔 8个16位等于128位 , 4个十六进制表示16位(一个16进制表示4位) ipv6的128位 由 8 个 16位 16bit 组成 每…

【LeetCode】【两个数组的交集】

力扣 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a;num…

基于MATLAB的指纹识别算法仿真实现

目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 在指纹图像预处理部分&#xff0c;论文对预处理的各个步骤包括规格化、图像分割、中值滤波、二值化、细化等以及各个步骤的方法进行了深入的分析和研究&#xff0c;选择了一种图像预处理方案。在指纹特征提取部分…

基于javaweb的医疗挂号管理系统(java+springboot+freemarker+layui+mysql)

基于javaweb的医疗挂号管理系统(javaspringbootfreemarkerlayuimysql) 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计&#xff0c;大作业&#xff0c;毕业设计&#xff0c;项目练习&#xff0c;学习演示等 功能说明 基…

幼儿园小程序实战开发教程(终篇)

我们已经写了四篇教程&#xff0c;涵盖了需求分析及各个页面&#xff0c;本篇是我们的最终篇。 咨询信息 我们小程序需要收集家长和孩子的信息&#xff0c;为此我们也规划了数据源。如果按照传统开发思路&#xff0c;那我们是要依次实现信息采集的每个字段&#xff0c;然后再…

<Linux系统复习>文件描述符

一、本章重点 1、进程和打开文件的关系 2、简单复习c语言文件操作 3、介绍系统调用&#xff1a;open、clos、write、read 4、理解文件描述符 5、文件描述符分配规则 6、理解stdin、stdout、stderr与fd的关系 7、理解linux下一切皆文件 8、理解重定向的本质 9、理解stdin和stdou…

《吉师作业》(1)之我是web手为啥让我学C

前言 &#x1f340;作者简介&#xff1a;吉师散养学生&#xff0c;为挣钱努力拼搏的一名小学生。 &#x1f341;个人主页&#xff1a;吉师职业混子的博客_CSDN博客-python学习,HTML学习,清览题库--C语言程序设计第五版编程题解析领域博主 &#x1fad2;文章目的&#xff1a;我不…

freeRTOS学习(二)

堆内存管理 先决条件 FreeRTOS是作为一组C源文件提供的&#xff0c;因此成为一个合格的C程序员是使用FreeRTOS的先决条件。 动态内存分配及其与FreeRTOS的相关性 内核对象&#xff1a;如任务、队列、信号量和事件组。为了使FreeRTOS尽可能易于使用&#xff0c;这些内核对象不…

科普一下MTU是什么,如何设置MTU

欢迎来到东用知识小课堂&#xff0c;下面我们就来科普一下一下MTU是什么&#xff0c;如何设置MTUMTU是最大传输单元的意思&#xff0c;代指一类通讯协议某一层上所能通过的最大数据包大小(以byte为单位)。最大传输单元这一主要参数一般与串行通讯接口相关(网络接口卡、串口等)。…

【Vue实用功能】彻底搞懂Vue中的Mixin混入

前言 有些小伙伴接手别人的Vue项目时&#xff0c;看到里面有个Mixin文件夹&#xff0c;可能会云里雾里的状态&#xff0c;今天我们来好好聊聊Mixin&#xff0c;争取以后不再云里雾里。 一、什么是Mixins&#xff1f; Mixins(混入)&#xff1a;当我们存在多个组件中的逻辑或者…

MySQL总结

文章目录一.SQL语句简介1.什么是SQL&#xff1f;2.SQL分类二.MySql常用数据类型三.数据库操作1.创建数据库2.查询和删除数据库3.备份/恢复数据库四.表操作1.创建表2.修改/查看表五.CRUD语句1.Insert语句2.Delete语句3.Update语句4.Select语句五.函数1.统计函数count2.字符串相关…

for in和for of

文章目录二者在什么情况下可以使用for ... in什么是可枚举的属性&#xff1f;for...of什么是可迭代的数据&#xff1f;总结二者在什么情况下可以使用 for … in 可以用在可枚举的数据&#xff0c;如&#xff1a; 对象数组&#xff08;循环的是索引&#xff09;字符串 什么是…

ESP8266-Arduino网络编程实例-发送邮件(基于SMTP)

发送邮件(基于SMTP) 本文将演示如何使用ESP8266发送邮件。实例中将使用SMTP(Simple Mail Transfer Protocol)协议通QQ邮箱向指定邮箱发送邮件。 1、设置QQ邮箱第三方服务 1)第一步:注册一个QQ邮箱 2)第二步:开启QQ邮箱的第三方服务 1、硬件准备 ESP8266 NodeMCU开发…

高通Android随身WIFI屏蔽商家远程控制断网

部分随身WIFI商家后台会监测用户是否使用的是自家的eSIM,若使用了外置卡槽或eSIM的ICCID改变就会断网,主要表现是先联网后突然变成飞行模式,或联网后开热点变飞行模式。这就是商家后台做了监测,检测到异常就断网。我们的主要解决思路就是禁止随身wifi连接商家的远程服务器,…

pytorch中一维卷积,二维卷积,三维卷积,层次特征注意力

一维卷积 一维卷积操作常用作文本数据或者序列数据的处理。这里以文本数据为例进行讲解。 下图左边是一个文本矩阵,是将这句话‘I like this movie very much!’转换为计算机可以处理的语言。对于宽度,可以认为是词向量的维度,高度可以表示为这个句子的最大长度,从这里可…