【浅学Linux】动态库与静态库的封装与使用
朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的?
文章目录
- 一:动态库与静态库的理解
- 二:静态库
- 2.1:静态库的使用
- 2.2:静态库的封装
- 三:动态库
- 3.1:动态库的使用
- 3.2:动态库的封装
一:动态库与静态库的理解
- 静态库:程序在编译链接的时候把库的代码链接拷贝到可执行文件中,程序运行的时候将不再需要静态库。
- 动态库:程序运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
我们先来理解几个问题:
1️⃣:库里面需不需要main函数?
不需要!
2️⃣:什么是链接?
就是把所有的.o文件链接形成一个可执行程序。
3️⃣:将我的所有.O文件给别人,别人可以使用吗?
可以!
4️⃣:你在使用库的时候,需要用到什么?
库文件和头文件。
二:静态库
2.1:静态库的使用
gcc 或者g++ 只认识系统库,不认识其他第三方库,所以我们想要使用对应的静态库的话,怎么做呢?
方式一:
库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
方式二:
指定路径, 大写的-i 头文件路径 大写的-L 库路径, 小写的l指定库名!
2.2:静态库的封装
在makefile中,根据对应的依赖关系以及依赖方法生成对应的.a文件和.O文件!
ar是gnu归档工具,rc表示(replace and create)。
总结一下就是将源文件翻译成.O文件以后把所有的.O文件打包起来即可!
三:动态库
3.1:动态库的使用
编译选项:
- I:链接动态库,只要库名即可(去掉lib以及版本号)。
- L:链接库所在的路径。
示例:gcc main.o -o main -L. -lhello
方式一:
库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
方式二:
导入环境变量的方式, 程序运行的时候,会在环境变量中查找自己需要的动态库路径–LD_LIBRARY_PATH。
关键点:我们要想使用动态库,一定要让进程找到对应的静态库,因为程序和动态库是分开加载的,属于运行时找库!
3.2:动态库的封装
- shared:表示生成共享库格式。
- fPIC产生位置无关码
- 库名规则:libxxx.so
示例:
相关文章
- 【附源码】Python计算机毕业设计社区住户信息管理系统
项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…...
2023/6/7 16:27:00 - 牛客P19836 裴蜀定理+莫比乌斯反演+杜教筛
题意: 一开始一个人在原点,它拥有nnn个整数xix_{i}xi,并且xi∈[1,m]x_{i}\in[1,m]xi∈[1,m],他每次可以选择一个xix_{i}xi,来向左走xix_{i}xi或向右走xix_{i}xi步,问有多大概率能够走到点111&am…...
2023/6/3 5:08:18 - # NUSTCTF(校外赛道)2022-wp
题目复现环境: https://www.ctfer.vip/contest/62/ 欢迎加QQ群,一起做题和共享解题思路: 936250507[Web]EzSQL http://47.103.60.98/访问时,提供了一个“查询”按钮。点击,进入查询结果页面。 http://47.103.60.98/i…...
2023/6/3 23:41:14 - 按漏洞的攻击途径分类情况分析
按受影响对象属性分类情况分析 图 3.11 是对漏洞按受影响对象的软、硬件形态进行统计分类的结果。得到软件中的漏洞 占多数的分析结果并不意外,因为从逻辑复杂度来说,相关软件通常都比硬件更复杂,因而 更容易出问题。而且对研究者来说&#…...
2023/6/3 5:34:31 - 渗透测试——内网主机发现
作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…...
2023/5/31 8:15:57 - 从Matlab实例学习遗传算法
前言 本文旨在使用智能优化算法及其MATLAB实例(第2版) 一书中的例子,来透彻理解遗传算法的本质。 问题背景 目标: 求解最大化函数 f(x)x10sin(5x)7cos(4x)f(x)x10 \sin (5 x)7 \cos (4 x)f(x)x10sin(5x)7cos(4x) 的 xxx&am…...
2023/6/7 4:23:33 - java计算机毕业设计疆域特色农家乐系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计疆域特色农家乐系统MyBatis系统LW文档源码调试部署 java计算机毕业设计疆域特色农家乐系统MyBatis系统LW文档源码调试部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技…...
2023/6/3 15:44:34 - 【Turtle合集】火遍抖音的五款魔法阵终于被我找到了(初代萌王,童年的小樱回来了)
导语 小编在昨天看了一个非常好玩的充电器,就是魔法阵充电器。这种感觉,完全是满满的中二气 息啊。魔法阵开启!哈哈哈(感觉有点儿幼稚,但是还挺有趣的) 魔法阵一直都出现在小说、动漫、电影、电视…...
2023/5/20 8:45:12 - 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)
目录 1.存取任意指定序号的元素和在最后进行插入和删除运算,利用顺序表存储最节省时间 2. 数据结构中具有记忆功能的是栈 3. 递归程序的优化一般为 尾递归优化 4.二叉树遍历,前中后序遍历用到的是栈,而层序遍历用到的队列 5. 将两个各有n个元素的有序表归并成一个有序表,最…...
2023/6/1 2:00:19 - perl 下判断文件和目录是否为空?
1,判断文件是否为空 没找到perl下直接判断文件为空的好方法,突然发现这个 Tie::File 模块挺有用,代码如下: #!/usr/bin/perl -w use strict; use Tie::File; my $filename /opt/test/aa; tie my array, Tie::File, $filename or …...
2023/5/28 6:46:15 - 会计制度设计
1、会计制度设计的特点是什么? 答:会计制度设计是以会计法律、法规为依据,用系统控制的理论和技术,把单位的会计组织机构、会计核算与监督和会计业务处理程序等加以具体化、规范化、文件化,以便据此指导和处理会计工作…...
2023/6/1 22:31:07 - 后端开发笔试题校招
第一题 TCP/IP 通常被认为是⼀个四层协议系统,自顶向下分别是应用层、传输层、网络层、数据链路层。UDP协议属于TCP/IP家族。 第二题 我认为不应该使用“Nagle算法”来优化网络,Nagle 算法规定,一个 TCP 连接上,最多只能有一个…...
2023/5/30 19:31:55 - Flutter 小白之旅---基础知识篇
1. Dart语言学习 Language tour | Dart DartPad 基础语法在线练习 2. 安装Flutte Install | Flutter在 macOS 上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 注意 xcode 安装 需要匹配自己的mac系统对应版本;&#…...
2023/5/31 19:02:52 - _cpp利用哈希封装实现unordered_map和unordered_set
文章目录0. 前言1. 改造哈希表1.1 哈希表节点的定义1.2 哈希表中的迭代器1.2.1 模拟实现后置加加的方法1.2.2 哈希表迭代器代码1.3 仿函数1.4 哈希表整体改造完成后的代码2. 封装实现unordered_map3. 封装实现unordered_set4. 测试案例5. 测试结果0. 前言 1. 改造哈希表 链接…...
2023/6/7 20:41:46 - 混合IP-SDN网络实现统一智能管理目前需要解决的问题
混合IP-SDN网络实现统一智能管理目前需要解决的问题混合IP-SDN网络实现统一智能管理目前需要解决的问题传统SDN网络面临的挑战海量数据流量分类路由优化网络安全关键技术以及研究方法智能路由优化方法软件定义路由器(software defined routing,简称 SDR)网络安全智能方法基于人…...
2023/5/29 17:51:07 - TFN T6300A 网络综合测试仪 以太网数据 千兆以太网测试仪 OTDR E1 PRI V.35/V.24 光功率计一体机
一款功能强大、便携式、方便使用、价格便宜的高性价比手持式以太网测试仪是企业中网络管理和维护人员的刚需仪器。好的以太网测试仪可以帮助工作人员迅速解决网络不通、网速慢、丢包、延迟等问题。 当今以太网测试仪市场参差不齐,说的功能一个比一个强,…...
2023/6/6 1:39:44 - Shell逻辑判断、分支语句(带案例,Shell脚本学习笔记)
逻辑语法: if [ 判断条件 ] ; then .... elif [ 判断条件 ]; then .... else .... fi (其中fi是结束标志) 踩坑提醒: 大括号里面写条件判断前,前后都要空一格,比如 ,错误写法:[$a $b] ,…...
2023/6/1 3:50:36 - 【附源码】Python计算机毕业设计设计与实现大学常规信息管理系统
项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…...
2023/6/6 1:53:51 - Go语言实现分布式缓存(一) ——lru淘汰策略和超时过期
我跟着极客兔兔的教程实现了分布式缓存,该系列文章是对实现过程的总结。 详细实现教程:7天用Go从零实现分布式缓存GeeCache 文章目录lru淘汰策略超时淘汰代码实现实例化缓存添加数据删除缓存获取缓存定期删除测试lru淘汰策略 缓存的大小是有限的&#x…...
2023/5/30 9:53:38 - 如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?
种子点功能连接方法基本概念和实现 种子点的功能连接基本概念功能连接在数据处理里的具体应用如何使用 Dpabi, AFNI 和 FSL 计算种子点功能连接呢?选择种子点利用DPABI软件进行种子点的功能连接利用AFNI (3dNetCorr)进行种子点的功能连接利用FSL (fslmeants + fsl_glm)进行…...
2023/6/5 15:10:29
最新文章
- Docker网络教程(二)host 网络教程
使用 host 网络的联网 本系列的教程涉及直接绑定在 Docker 宿主机网络上而不隔离网络的独立容器的联网问题。如果想了解更多 Docker 网络的理论知识,参考概述。 目的 本教程的目的是启动一个 nginx 容器,直接绑定到 Docker 宿主机的80端口。从网络的角…...
2023/6/9 12:48:45 - python3写一个http接口服务(get, post),给别人调用6
python3写一个http接口服务(get, post),给别人调用6 一、python3写一个http接口服务(get, post),给别人调用6 近年来异步web服务器比较火热,例如falcon/bottle/sanic/aiohttp,今天也来玩玩sanic。 Sanic是一个支持Python 3.7的w…...
2023/6/9 12:48:29 - Qt6 C++基础入门3 对话框与MainWindow
目录 对话框MainWindow菜单工具栏 对话框 目前的对话框主要有以下几大类 文件对话框( QFile Dialog)消息对话框( QMessageBox)输入对话框( QInputDialog)颜色对话框( QColorDialog)字体对话框( QFontDialog) 这是七大对话框及其基本用法的实例参考,所有代码都写在…...
2023/6/9 12:48:18 - ETC人车关系查询-ETC人车关系查询api接口
接口地址: https://登录后显示/api/189/363(支持:http/https)) 接口页面:https://www.wapi.cn/api_detail/189/363.html 网站地址:https://www.wapi.cn 接口简介:核验指定人员/企业是否是指定车辆的 ETC 开户人、车辆所有人或 E…...
2023/6/9 12:47:51 - 一文说清,4G语音工牌与WIFI和蓝牙语音工牌的区别
作为一种创新的无线音频采集和传输设备,4G语音工牌在许多行业和领域都展现出了巨大的优势和广泛的应用场景。 比如在销售场景和服务场景,利用4G语音工牌和NLP、语音识别、机器学习等技术结合,可实现: 帮销售型企业:提…...
2023/6/9 12:47:36 - Linux远程管理协议(RFB、RDP、Telnet和SSH)
提到远程管理,通常指的是远程管理服务器,而非个人计算机。个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式。 远程管理,实际上就是计算机…...
2023/6/9 12:46:36 - 【 Python 全栈开发 - WEB开发篇 - 29 】MySQL初步
文章目录 一、MySQL介绍二、SQL语言三、MySQL安装与配置第一步:下载压缩文件第二步:解压第三步:配置第四步:登录 一、MySQL介绍 MySQL 是一个开源的关系型数据库管理系统,它使用 Structured Query Language࿰…...
2023/6/9 12:46:23 - 计算机网络开荒2.2-Socket编程
文章目录 一、Socket概述二、Socket API 概述三、WinSock常用API3.1 常用API3.1.1 WSAStartUP3.1.2 WSACleanup3.1.3 Socket3.1.4 Closesocket3.1.5 bind3.1.6 listen3.1.7 connect3.1.8 accept3.1.9 send, sendto3.1.10 recv, recvfrom3.1.11 etsockopt, getsockopt 3.2 网络字…...
2023/6/9 12:46:03 - C++设计模式享元模式
以下是一个用 C 实现的享元模式示例代码: #include <iostream> #include <unordered_map> class Flyweight { private: std::string sharedState; public: Flyweight(std::string state) : sharedState(state) {} void operation(std::string uniqu…...
2023/6/9 12:45:47 - Scrum敏捷认证理论基础知识整理
一、Scrum框架关键点 Scrum框架有3个角色,3个工件,5个事件,5个价值观,简称3355。 3个角色: 产品负责人PO(Product Onwer)开发团队 (Develop Team)敏捷教练(Scrum Master࿰…...
2023/6/9 12:45:35 - webgpu之旅03
19854902 319854902 319854902 319854902 webgpu交Q流群我们找个例子看看别人的renderer three.js v152 首先init函数 看见中间有个对象 WebGPURenderPipelines 跟进去看看 这个构造函数里可以看见有这么些数据 get( renderObject ) {const device this.device;const cache …...
2023/6/9 12:45:14 - 【移动设备】iData 50P 技术规格
系列文章 【移动设备】iData 50P 技术规格 本文链接:https://blog.csdn.net/youcheng_ge/article/details/130604517 【H5】avalon前端数据双向绑定 本文链接:https://blog.csdn.net/youcheng_ge/article/details/131067187 【H5】安卓自动更新方案&a…...
2023/6/9 12:45:02 - joplin的安装和使用
本文主要介绍joplin的安装和坚果云的配合使用 坚果云 先到坚果云的官网注册登录坚果云 官网:https://www.jianguoyun.com/ a、点击右上角昵称 b、点击账户信息 c、安全选项 d、第三方应用管理 e、点击添加应用,输入应用名称Joplin(这里可以自定义) f、…...
2023/6/9 12:44:50 - 四种经典的知识变现盈利模式,看你适合哪一种
哈喽,大家好,我是海哥,知识付费变现创业教练,教育公司培训总监,从事知识付费变现咨询10年,已助力3000人实现知识付费变现。 知识变现有四种典型的盈利模式,看看你合适哪一种? 模式1&…...
2023/6/9 12:44:33 - docker使用笔记
一、安装docker https://docs.docker.com/engine/install/ubuntu/,按照官网命令一步步来即可。 添加当前用户到docker用户组,后面运行docker的时候前面不需要加sudo命令:https://www.cnblogs.com/fireblackman/p/16054371.html 查看自己当前…...
2023/6/9 12:44:16 - 读改变未来的九大算法笔记07_搜索引擎
1. 车库轶事 1.1. 1939年 1.1.1. 戴夫休利特(Dave Hewlett) 1.1.1.1. 惠普(Hewlett-Packard) 1.2. 1976年 1.2.1. 蒂夫乔布斯(Steve Jobs)和史蒂夫沃兹尼亚克(Steve Wozniak) …...
2023/6/9 12:44:02 - c++11 标准模板(STL)(std::bitset)(八)
定义于头文件 <bitset> template< std::size_t N > class bitset; 类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集,并将它与字符串和整数相互转换。 bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssig…...
2023/6/9 12:43:34 - 【工业控制系统安全】深入了解 ICS612:ICS 网络安全:第 1 部分
ICS 从业者可以立即在实际情况中使用他们的 ICS612 培训。 降落飞机 我认识一家生产工厂的首席执行官,我们就叫他比尔吧,他希望他的关键团队成员真正了解他的运营团队每天为实现生产目标而承受的压力。比尔还希望他的经理和支持人员能够理解“让它发生”…...
2023/6/9 12:42:14 - chatgpt赋能python:Python快速打开:如何提高Python执行速度
Python 快速打开:如何提高 Python 执行速度 介绍 Python 是一种解释型语言,由于其简洁易读,广泛用于数据科学、机器学习、Web 开发等领域。然而,它的执行速度相对较慢,这通常是由于其解释器中面临的硬件资源限制以及…...
2023/6/9 12:41:43 - PyTorch教程:Tensor的使用介绍
目录 创建Tensor Tensor的shape tensor数据类型 PyTorch tensor的数学和逻辑运算 Tensor Broadcasting广播 复制tensor 改变维数 和Numpy的转换 Tensor是PyTorch中心的数据抽象,本文深度详细介绍PyTorch的torch.Tensor类。包括创建Tensor的方法,…...
2023/6/9 12:41:29