Linux——动态库

Linux——动态库

  • gcc 指令生成动态库
  • 动态库的使用
  • 动态库与静态库区别
    • 直接装到系统中
    • 软连接
    • LD_LIBRARY_PATH
    • 直接修改动态库的配置文件

上一次我们了解了静态库,这次我们来了解动态库,如果还有没看过上一篇静态库的小伙伴,可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/136271201

gcc 指令生成动态库

我们之前ar指令可以生成静态库,但是动态库我们可以直接用gcc直接形成:
在这里插入图片描述

我们运行一下:
在这里插入图片描述
我们看看mymath_lib的结构:
在这里插入图片描述
我们把mymath_lib移到Test_2的目录下:
在这里插入图片描述

动态库的使用

动态库的使用其实和静态库差不多:
在这里插入图片描述
但是运行a.out时:
在这里插入图片描述
报错了,这是为啥呢?我们可以用指令看看a.out执行时需要的文件路径:
在这里插入图片描述

动态库与静态库区别

这时候,大家肯定有很多疑问,我们一个个来:
静态库之所以不会报错,是因为静态库在编译时会被直接嵌入到可执行文件中,因此在运行时不需要外部的共享库文件
在这里插入图片描述
但是动态库不一样:动态库在运行时被动态地加载到内存中,并且动态库的加载依赖于系统的共享库路径(usr/lib/)
在这里插入图片描述
这样可以解释,为什么我们告诉编译器路径,但还是找不到的问题。所以有了对应的解决方法:

直接装到系统中

这种方法简单粗暴,找不到是吧?直接装在系统中:
在这里插入图片描述
我们可以找找看:
在这里插入图片描述
这个时候,我们再来执行a.out:
在这里插入图片描述
我们用ldd查看路径:
在这里插入图片描述
发现之前空的路径有了。

软连接

我们先把之前我们写的头文件和库从系统里面删除:
在这里插入图片描述
这个时候,再用ldd:
在这里插入图片描述

这个时候,我们可以创建软连接(因为软连接就是储存的是路径):
在这里插入图片描述
这个时候我们再来试试:
在这里插入图片描述
我们再用ldd指令看看:
在这里插入图片描述
发现有了路径,但是,这个只能在当前文件夹使用,一旦跳出本地,就会失去效果。

所以,我们得创建一个完整的路径,然后放在lib64下:
在这里插入图片描述
我们运行一下:
在这里插入图片描述
我们看一下路径和软连接
在这里插入图片描述

LD_LIBRARY_PATH

LD_LIBRARY_PATH 是一个环境变量,用于指定动态链接器在运行时查找共享库的路径。在类Unix系统中(如Linux),动态链接器会根据这个环境变量中指定的路径来搜索共享库文件。这个环境变量通常用于临时指定额外的共享库路径,以便程序能够找到需要的共享库文件。
当运行一个依赖于共享库的可执行文件时,操作系统会使用动态链接器(通常是 ld.so 或 ld-linux.so)来加载程序所需的共享库。动态链接器会按照一定的顺序搜索共享库文件,其中就包括 LD_LIBRARY_PATH 环境变量中指定的路径。
如果共享库文件位于非标准的路径下,或者希望优先使用特定路径下的共享库,您可以通过设置 LD_LIBRARY_PATH 环境变量来告诉动态链接器在哪里查找共享库文件。

我们可以打印出来看看:
在这里插入图片描述
我们在这个的基础之上,可以库的路径添加到这里面去:
在这里插入图片描述

直接修改动态库的配置文件

上面的全局变量的方法如果重启,就会失效,还有其他方法吗?
其实我们有一个关于动态库的配置文件:/etc/ld.so.conf.d
在这里插入图片描述
我们可以打印其中的一条:
在这里插入图片描述
我们可以看到这里面放的是路径,那么我们可以创建一个文件,里面放路径:
我们创建一个My_Math.conf文件:
在这里插入图片描述
然后放入我们的路径:
在这里插入图片描述
然后我们再来看一下:
在这里插入图片描述
如果不行,我们执行ldconfig命令。重新配置:
在这里插入图片描述

这里注意一下,一般来说,gcc优先动态链接,使用动态库。实在没有办法才采用静态库。

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

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

相关文章

【深度学习笔记】3_6 代码实现softmax-regression

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅,我们想要把它改成∅←1←2←3。在遍历链表时,将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…

详细讲解缓冲区

目录 理解回车和换行(\r&&\n) 那如何实现单独的回车和换行呢? 缓冲区 证明有缓冲区的存在 ​编辑 怎么刷新缓冲区(显示器缓冲区)? fflush函数​编辑 缓冲区出现的意义 I/O流 模拟倒计时小程…

Nodejs 第四十章(prisma)

什么是 prisma? Prisma 是一个现代化的数据库工具套件,用于简化和改进应用程序与数据库之间的交互。它提供了一个类型安全的查询构建器和一个强大的 ORM(对象关系映射)层,使开发人员能够以声明性的方式操作数据库。 Prisma 支持…

EasyRecovery破解版补丁免费钥匙下载

说起数据恢复软件,相信没有小伙伴不知道EasyRecovery这个软件吧,该软件具有快捷、高效、便捷的特点,且提供的功能也非常全面,不仅可以恢复各样被删除的文件、视频、图片等,还可以支持SD卡数据恢复,TF卡等各…

深入浅出CChart 每日一课——快乐高四第六十一课 飞梯十二重,CChart三维曲线图绘制

同学们好,今天继续介绍CChart本身的功能。接下来这几节课呢,笨笨老师准备对CChart的三维视图和场图功能进行详细一些的介绍。本节课首先介绍三维曲线图。 CChart软件库的开发,首先是从二维曲线图开始的,这一部分经过长时间的打磨…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇: 解析token: 统一携带token: 驼峰命名与下划线命名转换: NotEmpty!!! mybatis: PageHelper设置后,会将pageNum,和pageSize自己拼接…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

Spring Session:入门案例

Spring Session provides an API and implementations for managing a user’s session information. Spring Session提供了一种用于管理用户session信息管理的API。 Spring Session特点 传统的Servlet应用中,Session是存储在服务端的,即:Ses…

聚道云软件连接器:高科技企业财务自动化,提升效率准确性!

客户介绍: 某互联信息技术有限公司是一家专业从事信息技术服务的高科技企业,在业内享有较高的知名度和影响力。近年来,公司业务快速发展,对信息化建设提出了更高的要求。 客户痛点: 在传统情况下,该公司的…

【探索Linux】—— 强大的命令行工具 P.23(线程池 —— 简单模拟)

阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下,线程池是一种常见的并发编程模型,它能够有效地管理…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结,仅供学习,侵权联系就删 目录如下图 本次只总结一部分,刚学习有错请指出,VX关注晓理紫,关注后续。 2、概述…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen:计算字符串长度 看一个代码&…

“AI教父”李一舟翻车,中国AI培训路在何方

近日,AIGC领域掀起了一场不小的风波,知名AI博主李一舟在各大平台推出的AI课程突然下架,其账号遭到禁止关注的情况。 这一事件不仅引发了广泛关注和热议,更让许多真正想学习AIGC的用户感到迷茫和困惑:在众多的AIGC课程中…

ONLYOFFICE 桌面编辑器现已更新至v8.0啦

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

一个div最简方法画太极图

一个div最简方法画太极图 直接上代码&#xff0c;一目了然 html <div class"太极图"/>css .太极图 {position: relative;width: 400px;height: 400px;background: linear-gradient(to right,white 50%,black 50%);border-radius: 50%;box-shadow:0 0 12px …

c#高级——插件开发

案例&#xff1a;WinForm计算器插件开发 1.建立插件库&#xff0c;设置各种自己所需的插件组件 如下图所示&#xff1a;进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合&#xff0c;其中每个键对应一个值。在Java中&#xff0c;Map接口定义了一种将键映射到值的数据结…

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…