Linux下创建动态链接库与静态链接库

news2024/11/17 19:49:16

动态链接库

Linux下的动态链接库文件扩展名为so,可以用多个文件生成一个动态链接库。

在头文件中定义三个函数,三个函数分别于三个cpp文件中实现。
在这里插入图片描述
在这里插入图片描述

将三个cpp文件编译成动态库libdynamic.so
-fPIC表示编译为位置独立的代码,如果不选择默认位置相关,编译时还是会将函数拷贝到代码段中,发挥不出动态链接库省内存空间的优势。
在这里插入图片描述
将main.cpp与刚刚编译出的动态库编译链接成可执行文件并查看链接情况。
在这里插入图片描述
可以看到对于手动链接的动态库,显示未找到。
需要在/etc/ld.so.conf.d/目录下新建任何以.conf为后缀的文件,该文件内容为要动态链接的库文件所在的目录。
在这里插入图片描述

Linux静态链接库

Linux下的静态库文件扩展名为.a。

编译三个cpp文件,使用ar命令创建静态库文件,并使用nm -s 命令来查看.a文件的内容。
在这里插入图片描述
编译链接main.cpp
在这里插入图片描述

比较使用静态链接库与动态链接库时进程的地址空间

在程序中加个sleep()使其长时间运行,运行指令后添加&使其在后台运行,这时可以看到进程的pid,通过cat查看该进程的maps。

静态链接库:
在这里插入图片描述
动态链接库:
在这里插入图片描述
通过对比可以发现,通过动态链接得到的程序在运行时的进程地址空间远比通过静态链接的程序运行时的地址空间复杂,可以看到静态链接时其进程的地址空间中只有程序本身,而动态链接时进程的地址空间除了其本身还有所链接的库。这是因为静态链接时将所调用函数拷贝到了要运行程序的代码段,而动态链接不作拷贝,通过动态链接库中相应函数的地址进行调用。更具体的讲,调用动态链接库中的函数时系统首先会检查当前正在运行的程序,看内存中是否有此函数的拷贝,有的话直接使用,没有时才链接载入。因此,动态链接在空间上更具优势,静态链接在程序效率上更具优势,二者都实现了模块化。

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

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

相关文章

使用YOLOv5练自己的数据集

说明 上次使用学习了如何运行yolov5检测自己的数据,这次学习yolov5如何训练自己的数据集 本次记录如何使用yolov5训练自己的数据集以及遇到报错解决方案 数据 使用数据:水果数据集 数据包含了png图片和相应的标注文件 切分数据 代码如下&#xff1…

[ vulhub漏洞复现篇 ] solr 远程命令执行(CVE-2019-0193)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Kubernetes的基础概念

一、Kubernetes的介绍 用于自动部署、扩展和管理"容器化(containerized)应用程序"的开源系统 可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一个生态极其丰富的容器编排框架工具 …

【现场问题】zookeeper的集群,其中两台起来了,但是另外一台就是起不来,或者起来也是standalone

zookeeper问题现象集群的配置zookeeper的启动以及状态查看问题报错点问题现象 1、总共三台机器,node92,node93,node94 其中node92做了拉起,但是node93(leader)和node94(follower)&a…

浅谈MVVM ——Model-View-View-Model

浅谈MVVM ——Model-View-View-Model 前言: 笔者最近接到这样一个机器人项目,接入他们的机器人平台做二次开发,开发自己的opk移植到机器人上做医院展示使用。opk是必须使用机器人厂家提供的经过一定封装过的,该opk的架构是MVVM。…

48W字?GitHub上下载量破百万的阿里:图解Java、网络、算法笔记

Java基础这个东西,无论在哪个公司都被看得尤为重要,而面试中关于基础的问题也是层出不穷。所以基础可以说是重中之重,当你的基础打牢了,其他的也就没有那么重要了。 说到基础,无外乎操作系统,网络&#xf…

pikachu-CSRF-SSRF-RCE速通

pikachu-CSRF-SSRF-RCE速通 目录pikachu-CSRF-SSRF-RCE速通CSRFCSRF(get)CSRF(post)CSRF TokenSSRFSSRF(curl)SSRF(file_get_content)RCEexec "ping"RCE exec "eval"CSRF 跨站请求伪造,说的通俗一点就是攻击者构造出某个网站的数据包请求并部署…

p3.第一章 基础入门 -- Python编程基本概念 (三)

1.2.2 Python语言 1.2.2.1 Python发展 1989年圣诞节期间,为了打发无聊的时间,荷兰人Guido van Rossum(吉多范罗苏姆)(数学、计算机双硕士,2005年加入Google,2013年加入DropBox)&am…

JavaUUID的理解

可笑,你竟然不知道 Java 如何生成 UUID - 沉默王二博客 UUID是通用唯一标识符的意思,就是唯一不重复的一串字符。 UUID的用途: 随机生成的文件名;Java Web 应用程序的 sessionID;数据库表的主键;事务 ID&…

EMQ 助力阿里云洛神云网络构建新一代“亿级并发、百万级吞吐”NLB 网络型负载均衡系统

万物智联的数字化时代,我们正走在从“数据量变”到“连接质变”的道路上。在日益丰富的物联网应用场景中,实现海量设备与云端之间双向通信连接,分析并从中获得实时洞察成了打造成功物联网解决方案的核心推动因素。EMQ 映云科技(以下简称“EMQ”)作为全球领先的开源物联网基础设…

UE在TextRender上显示中文文本

文章目录 1.实现目标2.实现过程2.1 添加字体2.2 创建字体材质2.3 将字体应用到TextRender3.参考资料1.实现目标 UE的UMG可以正常支持中文,但是TextRender并不支持中文,因此需要添加本地离线中文字体库,使TextRender显示中文。 2.实现过程 2.1 添加字体 (1)选择User Int…

day6bom操作浏览器

apis-day6bom-操作浏览器 文章目录apis-day6bom-操作浏览器1、window对象1.1BOM(浏览器对象模型1.2定时器-延时函数1.3JS执行机制(重要)1.4 location对象1.5 navigator对象1.6histroy对象(用的少)2、swiper插件3、本地存储&#x…

当前的数字化,CIO 们到底需要什么?

“做数字化,没人、没钱、没资源,但还要做效果,该怎么办?” 这是很多 CIO 当下都面临的困境。 那么,对于不同企业来说,到底该如何有效探索数字化转型之路呢? 数字化转型的三个阶段 Gartner 把…

简易黑客初级教程:黑客技术,分享教学

前言 第一节,伸展运动。这节操我们要准备道具,俗话说:“工欲善其事,必先利其器”(是这样吗?哎!文化低……)说得有道理,我们要学习黑客技术,一点必要的工具必不可少。 1,一台属于自己的可以上…

【面试题】2023 中级前端面试题

前言 从前端学习到找一份合适的工作,大大小小的面试必不可少,所以我对初级前端面试题进行了初步整理,也方便自己查阅,也希望对小伙伴们有所帮助! 给大家推荐一个实用面试题库 1、前端面试题库 (面试必备&…

C语言——内存中数据存储的详解(整型与浮点型)

文章目录1.数据类型的详细介绍1.1数据类型介绍1.2类型的基本归类整型类型浮点类型构造类型指针类型空类型2.整型在内存中的存储2.1原码、反码、补码2.2大小端存储大小端存储存在的意义编写一个程序判断当前机器的存储方式是大端存储还是小端存储2.3经典习题练习一练习二练习三c…

Prometheus部署Prometheus Server、Pushgateway、Node exporter、AlertManager

目录1. 安装Prometheus Server1.1 下载解压1.2 修改配置文件prometheus.yml1.3 启动Prometheus Server2. 安装Pushgateway2.1 下载解压2.2 启动Pushgateway3. 安装Node Exporter3.1 下载解压3.2 启动Node Exporter4. 安装Alertmanager4.1 下载解压4.2 启动Alertmanager1. 安装P…

CS5518 MIPI转LVDS转换方案芯片|DSI转LVDS转换方案芯片

CS5518 是一款MIPI DSI 至 LVDS 转换器方案芯片。 Capstone CS5518是一款MIPI DSI输入、LVDS输出转换芯片。MIPI DSI 支持多达4个局域网,每条通道以最大 1Gbps 的速度运行。LVDS支持18位或24位像素,25Mhz至154Mhz,采用VESA或JEIDA格式。它只…

CMake中target_sources的使用

CMake中的target_sources命令用于将源添加到target&#xff0c;其格式如下&#xff1a; target_sources(<target><INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) # general formtarget_sources(<target>[<…

网络安全之反序列化漏洞分析

简介 FastJson是alibaba的一款开源JSON解析库&#xff0c;可用于将Java对象转换为其JSON表示形式&#xff0c;也可以用于将JSON字符串转换为等效的Java对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。 使用 对于序列化的方法toJSONString()有多个重载…