Linux 动态库的制作与使用

news2024/11/23 20:14:46

目录

  • 动态库的制作和使用

动态库的制作和使用

在这里插入图片描述

原始结构如下:
在这里插入图片描述

先进入calc文件,并生成与位置无关的.o文件
在这里插入图片描述

接着生成动态文件库,使用ll指令可以看到,库名为绿色,linux中绿色的文件一般都是可执行文件
在这里插入图片描述

将其生成的libcalc.so文件拷贝到lib文件下
在这里插入图片描述

生成main可执行文件
在这里插入图片描述

当尝试执行时,报错,无法找到动态库文件
在这里插入图片描述

为什么会这样呢?因为运行的时候,动态库未被加载到内存中,导致可执行文件main在运行时无法找到该动态库
在这里插入图片描述

通过ldd命令查看可执行文件main的动态依赖库,发现自己写的动态依赖库libcalc.so未被找到
在这里插入图片描述

此时需要系统的动态载入器(ld-linux.so)动态加载, 现在来解决这个问题
在这里插入图片描述


(该方法一关闭终端就会失效,仅作学习用途)
DT_RPATH段是没办法改变的,所以尝试在环境变量LD_LIBRARY_PATH中加载所使用的动态库的绝对路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/Linux/lession06/library/lib

向环境变量LD_LIBRARY_PATH中添加动态库的绝对路径

使用echo可以看到,该动态库的绝对路径已经被成功的加载到了环境变量中。最后执行成功。


怎么样永久解决这个问题呢?两种方法,一是用户级别的配置:
在这里插入图片描述

在这里插入图片描述

配置完并保存退出后,需要使配置生效,下面两行命令都可以,是同样的意思,选一种即可
在这里插入图片描述

这个就是用户级别的配置,
在这里插入图片描述

第二种方法就是进行系统配置

在该系统文件中进行配置
在这里插入图片描述

同样在该文件的最后一行输入:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/Linux/lession06/library/lib

在这里插入图片描述

保存退出后使用source命令使该配置生效
在这里插入图片描述

最后可以看到,可以找到动态库的位置了
在这里插入图片描述


上面介绍了改环境变量从而解决动态库加载失败的两种方法,下面来介绍改/etc/ld.so.cache

因为/etc/ld.so.cache文件里的内容均为二进制文件,所以需要别的方法

首先在/etc/ld.so.conf文件中加入动态库的绝对路径/root/Linux/lession06/library/lib
在这里插入图片描述

再输入下图中的该指令
在这里插入图片描述

同样可以解决问题
在这里插入图片描述


最后一种解决方法就是把动态库文件放到/lib/,或者/usr/lib目录内,也能解决问题(这种方式不建议使用,这两个目录内有很多文件,可能会库文件重名导致出现问题)


📝我的个人主页
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️今天你做别人不想做的事,明天你就能做别人做不到的事♐


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

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

相关文章

如何快速搭建一个SpringBoot项目

前面我们了解了SpringBoot背景和特点,本节我们主要介绍如何快速构建一个SpringBoot项目,以此来提升日常开发效率。 SpringBoot是搭建应用的手脚架,由Spring公司的核心团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。…

如何平衡倾斜摄影的三维模型轻量化数据文件大小和质量效果?

如何平衡倾斜摄影的三维模型轻量化数据文件大小和质量效果? 倾斜摄影超大场景的三维模型数据文件大小的具体范围取决于多种因素,如原始数据的复杂度、轻量化处理的方式和压缩算法等。一般而言,经过轻量化处理后,数据文件大小可以减…

centos7安装nginx及uwsgi部署django项目

1、安装配置uwsgi pip install uwsgi 2、在项目根目录下创建image_ocr_uwsgi.ini配置文件 [uwsgi] # 对外提供http服务的端口 http :9000 # 用于和nginx进行数据交互的端口 socket 127.0.0.1:8001 # django程序的主目录 chdir /home/image_process/image_ocr/image_ocr #…

【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI

目录 0x00 响应时间和吞吐量(Response Time and Throughput) 0x01 相对性能(Relative Performance) 0x02 执行时间测量(Measuring Execution Time) 0x03 CPU 时钟(Clocking) 0x…

【RabbitMQ】| 狮子带你(超详细)原生Java操作兔子队列

目录 一. 🦁 前言二. 🦁 原生Java操作RabbitMQⅠ. 简单模式1. 添加依赖2. 编写生产者3. 编写消费者 Ⅱ. 工作队列模式1. 编写生产者2. 编写消费者3. 实现 Ⅲ. 发布订阅模式1. 编写生产者2. 编写消费者 Ⅳ. 路由模式1. 编写生产者2. 编写消费者 Ⅴ. 通配符…

SpringCloud源码之Spring Cloud Common核心接口说明

spring cloud commons spring cloud提供的通用抽象包,组件的实现基本上都依赖于当前包的接口定义实现功能,下面就是梳理一下当前包中都提供了哪些比较重要的接口 1. 服务注册 1.1 DiscoveryClient DiscoveryClient 是一个顶级的接口类,用…

node项目的建立

文章目录 1.node项目的建立1.1项目初始化1.2 安装express1.3 初始化服务器 2.配置跨域2.1安装cors2.2cors的引入(app.js中) 3.初始化路由3.1新建文件3.2初始路由模块3.3app.js注册3.4 在postman测试 4.抽离路由处理模块3.1 在router_handler新建user.js3…

为什么LC谐振频率附近信号会被放大

这个是LC低通滤波电路, 它的增益曲线是这样的 很多同学不理解为什么谐振频率附近信号会被放大,今天就来聊一聊为什么谐振频率附近信号会被放大。 看到这个LC低通滤波电路,假设输入信号源内阻为Rs,L和C为理想电感和电容&#xff0…

Jmeter(五)_CSV Data参数化,Beanshell

一.CSV Data Set Config 准备好一个txt文件,写入如下内容,第一行可以不写,写了的话也会作为一组数据被运行: 然后把后缀名改为CSV,这样一个参数化文件就准备好了 然后打开jmeter,在需要使用这个参数化…

数据库系统-数据库查询实现算法

文章目录 一、一趟扫描算法1.1 算法概述1.2 算法逻辑&物理实现1.2.1 逻辑层面1.2.2 物理层面1.2.2.1 P11.2.2.2 P21.2.2.3 P31.2.2.4 P4 1.3 迭代器构造查询实现算法1.4 关系操作的一趟扫描算法1.4 基于索引的查询实现算法 二、两趟扫描算法2.1 两趟算法基本思想2.2 多路归…

Clickhouse分布式表引擎(Distributed)写入核心原理解析

Clickhouse分布式表引擎(Distributed)写入核心原理解析 Clickhouse分布式表引擎(Distributed)写入核心原理解析Clickhouse分布式表引擎(Distributed)查询核心原理解析 Distributed表引擎是分布式表的代名…

vue打包并部署到nginx上

一、打包vue项目 打包的命令依据项目的配置可能会有所不同,打包的命令可以在package.json中查看 项目中vue.config.js中的配置如下: proxy关系到我们项目部署到nginx上需要配置对应的反向代理 publicPath关系到我们部署时是否需要配置子路径 默认情况…

基于公共信箱的全量消息实现

作者 | 百度消息中台团队 导读 消息中台为百度App以及厂内百度系产品提供即时通讯的能力,提供包括私聊、群聊、聊天室、直播弹幕等用户沟通场景,并帮助业务通过消息推送触达用户。百度App存在需要以『低用户打扰』的形式触达全量用户的场景,而…

AcWing第 96 场周赛

竞赛 - AcWing 一、完美数 4876. 完美数 - AcWing题库 1、题目 如果一个正整数能够被 2520 整除,则称该数为完美数。 给定一个正整数 n,请你计算 [1,n]范围内有多少个完美数。 输入格式 一个整数 n。 输出格式 一个整数,表示 [1,n] 范…

C++:Article : 链接器(三):库与可执行文件的生成

链接器:库与可执行文件 1. 静态库1.1 静态链接下,可执行文件如何生成 2. 动态库2.1 动态库特点以及与静态库使用方式差异2.2 动态库和静态库使用时间 3. load-time dynamic linking(加载时动态链接)3.1:阶段一&#xf…

【工具】FFmpeg|超大视频本地有损压缩,500MB变25MB(支持 Windows、Linux、macOS)

参考: 如何将一分钟长的1080p视频压缩至5MB以内?-知乎-滔滔清风近期HEVC扩展备用安装方法-B站-悲剧天下 总共三个步骤,安装FFmpeg、运行指令、打开视频。 亲测 500MB 变 25MB。 1 安装FFmpeg 对于不需要看教程可以自行完成安装的同学们&am…

MySQL基础案例——数据表的基本操作:创建表和修改表

目录 案例目的: 创建表: 创建offices: 创建employees表: 修改表: 将 employees 的 mobile 字段移动到 officeCode 字段后: 将 birth 字段名称改为 employee_birth: 修改 sex 字段,数据类…

TryHackMe-Looking Glass(boot2root)

Looking Glass 穿过镜子。仙境挑战室的续集。 端口扫描 循例nmap 又是一堆ssh,跟之前的玩法一样 找到正确的ssh端口之后后给了一段密文,要求输入secret才能进入ssh 这看起来非常像凯撒密码 唯一可识别的信息是Jabberwocky,我们找到了它 它…

IDA简单使用

今天来简单介绍一下逆向中常用到的另一个静态分析工具IDA,还是昨天那个打印demo(64位): #include #include char a[] "https://www.vultop.com/"; int main(int argc, char* argv[]) { printf("%s", a)…

什么是微服务

目录 一、微服务介绍 1. 什么是微服务 2. 微服务由来 3. 为什么需要微服务? 3.1 最期的单体架构带来的问题 3.2 微服务与单体架构区别 3.3 微服务与SOA区别 4. 微服务本质 5. 什么样的项目适合微服务 6. 微服务折分与设计 6.1 微服务设计原则 7. 微服务…