Linux——使用第三方库链接的方式——动态式

news2024/11/18 21:31:56


回顾上文:

(122条消息) Linux使用第三方库链接的使用方式——静态式_橙予清的zzz~的博客-CSDN博客icon-default.png?t=N5K3https://blog.csdn.net/weixin_69283129/article/details/131414804?spm=1001.2014.3001.5502      上篇文章中,我讲到了关于链接第三方库作为静态库的使用方式,其中有两种:一种是下载公司B提供的安装包到自己的目录中进行编译链接,但缺点是步骤过于复杂,需要告知头文件的地址、库文件的地址和名称;第二种比较方便,但需要将安装包的头库文件拷贝到gcc指定的路径下才行,方便gcc编译器寻找,但是不建议用这种方式,因为不要随意的去修改系统路径下的内容,可能会导致很多问题的出现。

        而接下来,我将带大家实现用第三方库做动态库的形式去链接生成可执行文件!


第三方库被作为动态库的使用:

案例1:

        我仍是用两个窗口分别模拟客户端(客户)和服务端(公司B)去实现:

1、客户端视角,该目录下只有main.c文件,他正在等待服务端提供函数实现等文件的到来。

 

2.服务端视角:该目录下已经写好了客户需要的Add.c、Sub.c、Add.h、Sub.h文件

 

插播一条指令:

        -fpic是GCC的一个编译选项,全称是position-independent code,即生成位置无关代码。该选项会使得编译器生成不依赖于特定内存地址的可执行文件,使得程序可以在不同的内存位置上执行。

        -fpic选项是生成位置无关代码和动态链接库的必要条件。因为在动态链接过程中,代码段会被加载到不同的内存地址,而位置无关代码就是为此而设计的,它可以被加载到任意的内存地址上执行,从而增加了代码的可移植性。通过本文的阐述,你已经了解了-fpic选项的含义、应用场景及生成代码的常规流程。如果你希望生成的动态链接库在不同平台上都能正常运行,就必须使用-fpic选项进行编译。

3.将.c文件全都生成为.o目标文件:

 

4、创建一个动态链接库,需要使用 GCC 的-shared选项。

使用file指令查看该动态链接库,可以发现dynamically linked动态链接,表明生成动态库成功。

5、使用makefile指令创建多项指令,并将动态库文件和头文件打包到一个目录中:

 

6、将打包好的文件压缩成压缩包:

 

7.客户端视角:开始解压服务端提供的安装包:

 

 

8、开始链接这些库文件和头文件并生成可执行文件:

         错误解析:我们发现这次和上篇文章中链接静态库出现的情况一模一样,都是gcc编译器不认识第三方提供的头文件、库文件!

        所以我们需要为gcc编译器特别指明这些库文件、头文件的路径!

解决方法:

 于是可执行文件被生成了!

:在后面加上:-L 库文件的路径 

    在后面加上:-l(大写i) 库文件的名称

    在后面加上:-l(小写L) 库文件的

     -l链接方式需要注意:得去除动态库文件libmy_math.so的前缀lib和后缀.so

        

 9、在运行的可执行文件的过程中,发现无法运行 !

        为什么?连可执行文件都无法运行了?因为运行的时候是由操作系统去执行,已经和gcc没有关系了,gcc的任务已经完成了。你只告诉了gcc编译器第三方动态库的库文件名称、路径,以及头文件路径。但是操作系统是不知道的,于是产生了错误。

解决方法:采用export指令增添环境变量

 将第三方动态库文件mylib的绝对路径添加到环境变量中即可。

运行该可执行文件,成功运行!

        如下图便是使用export指令添加库文件的绝对路径到环境变量的结果显示:

 


还有一种能运行可执行文件的方式:利用软链接去链接动态库libmy_math.so文件

ln -s指令:产生对某个文件进行软链接

         使用ln -s对该动态库进行链接后,操作系统就相当于认识了该动态库,便可以直接运行可执行文件了。 

 

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

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

相关文章

股票技术分析方法综述

文章目录 K线均线MACDKDJ和RSIBOLL线趋势理论、支撑位和压力位形态理论量价关系理论道氏理论波浪理论江恩理论缠论自定义指标 K线 K线的组合形态是K线技术分析中的重要部分,包括早晨之星、黄昏之星、红三兵、黑三兵等。 早晨之星:由三根K线组成&#x…

OpenGL 抗锯齿

1.简介 你可以看到,我们只是绘制了一个简单的立方体,你就能注意到它存在锯齿边缘。 可能不是非常明显,但如果你离近仔细观察立方体的边缘,你就应该能够看到锯齿状的图案。如果放大的话,你会看到下面的图案&#xff1a…

家校互动、班级管理系统

最近做了一款使用若依开源框架搭建的一款家校互动、班级管理的平台,采用uniapp作为APP端,原生小程序作为小程序的家长端。

软件测试的概念与过程(软件测试的历史、概念、结构、过程)

软件测试的概念与过程----软件测试的历史 软件测试的历史软件的概念软件的结构软件测试的过程 软件测试的历史 1、早期的的软件开发过程中,将测试“调试”,目的是纠正软件已经知道的故障,常常有开发人员自己去完成这部分工作。 2、1957年&…

使用数据集工具

一.数据集工具介绍 HuggingFace通过API提供了统一的数据集处理工具,它提供的数据集如下所示: 该界面左侧可以根据不同的任务类型、类库、语言、License等来筛选数据集,右侧为具体的数据集列表,其中有经典的glue、super_glue数据集…

Unity | HDRP高清渲染管线学习笔记:材质系统Lit着色器

目录 一、Lit着色器 1. Surface Options 2. Surface Inputs(表面输入) 3. Transparency Inputs 二、HDRP渲染优先级 我们可以把现实世界中的物体分成不透明物体和透明物体(其中包括透明或者半透明)。在实时渲染时&#xff0c…

Debian二次开发网关支持Docker+RS485+网口

随着物联网技术的不断发展,瑞芯微边缘计算网关作为一种集成多种接口和功能的智能网关,逐渐成为了物联网领域中的热门产品。本文将详细介绍瑞芯微边缘计算网关的特点和优势,并探讨其在实际应用中的广泛应用。 瑞芯微Linux系统边缘计算网关是一…

【Java】 Java 私有接口方法的使用

本文仅供学习参考! 相关教程地址: https://www.baeldung.com/java-interface-private-methods https://www.geeksforgeeks.org/private-methods-java-9-interfaces/ https://www.runoob.com/java/java9-private-interface-methods.html 接口是定义一组方…

java之路—— SpringMVC的常用注解解析以及作用、应用

创作不易,真的希望能给个免费的小 文章目录 1、Controller2、RequestMapping3.GetMapping、PostMapping、PutMapping、DeleteMapping4. RequestParam5.PathVariable6.RequestHeader7.CookieValue8.RequestBody9.ResponseBody10.SessionAttribute11.ControllerAdvice…

二层、三层交换机是什么?有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解二层交换机和三层交换机是什么,以及他们的区别。 目录 一、二层交换机是什么? 二、二层交换机的主…

本地生活多城市合伙人系统开发

本地生活多城市合伙人项目是一种基于本地生活服务的创业项目,旨在为各个城市的居民提供方便、实惠、高品质的生活服务。该项目通过招募多个城市的合伙人,建立完整的本地生活服务平台和供应链体系,覆盖不同类型的本地生活服务,如餐…

Nginx的Rewrite(地址重定向)

目录 前言 一、Rewrite 跳转场景 二、Rewrite 跳转实现 三、Rewrite实际场景 3.1Nginx跳转需求的实现方式 3.2rewrite放在 server{},if{},location{}段中 3.3对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite语法格式 5.1rewrite语法格式…

互联网常见架构接口压测性能分析及调优手段建议

目录 互联网常见架构接口压测性能分析及调优手段建议 1 接口名称: 获取列表 1.1 压测现象:单台tps700多,应用cpu高负载 1.1.1 问题分析: 1.1.2 改进措施: 1.1.3 改进效果: 1.2 压测现象:数据库资源利用率高 1.2.1 问题分析: 1.2.2 改进措施: 1.2.3 改…

SciencePub学术 | 计算机科学类重点SCIEEI征稿中

SciencePub学术 刊源推荐:计算机科学类重点SCIE&EI征稿中!信息如下,录满为止: 一、期刊概况: 计算机科学类重点SCIE&EI 【期刊简介】IF:3.0-3.5,JCR 2区,中科院4区; 【检…

使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图

大家好,我是带我去滑雪! 一幅精美的科研绘图会有诸多益处,精美的图像可以更好地传达研究结果和数据分析的重要信息。通过使用清晰、直观和易于理解的图像,可以更好地向读者展示研究的发现,有助于读者理解和解释数据。还…

JAVA开发(记一次504 gateway timeout错误排查过程)

一、问题与背景: 最近在发布一个web项目,在测试环境都是可以的,发布到生产环境通过IP访问也是可以的,但是通过域名访问就出现504 gateway timeout。通过postman去测试接口也是一样。ip和端口都可以通,域名却不行&…

如何在矩池云上运行 AI 图像编辑工具 DragGAN

5 月,DragGAN 横空出世,在开源代码尚未公布前,就在Github上斩获近 20000 Star,彼时,页面上只有效果图和一句“Code will be released in June”,然而这也足够带给人们无限期待。 在6月末,在若干…

SpringBoot最多可以处理多少个请求?

SpringBoot最多可以处理多少个请求? SpringBoot夺命连环14问,1天刷完别人半个月的springboot面试内容,比啃书效果好多了!_哔哩哔哩_bilibili 最小线程数:最少的厨师的量,饭店人不多的时候的量。 最大线程数…

微信可以自动跟圈的软件有吗?

对于许多人而言,每日发朋友圈已成为必要的任务之一,如同上学时老师检查作业般。但发圈何尝不像是写作业一样呢?有许多小号需发几十上百条朋友圈,令人感到枯燥、浪费时间。再加上我们还有其他事务要处理,例如服装店老板…

让你不再疑惑ai绘画生成器有哪些

有一天,设计师小李接到了一份任务,要在短时间内完成一幅复杂的插画。小李感到非常苦恼。于是,他开始寻找一种新的解决方案。通过搜索和咨询同事,小李发现通过使用ai绘画工具可以提高快速绘制图画的速度.那么,你知道最新…