【linux】动静态库的使用与制作

本章节是基础IO的的最后一个话题!!

目录

  • 浅谈一下动静态库:
  • 动静态库的制作与使用:
    • 静态库:
      • 怎么办:
        • 方法一:
        • 方法二:
        • 方法三:
        • 方法四:
      • 是什么:
      • 为什么:
    • 动态库:

浅谈一下动静态库:

我们有没有用过库?
答案是一定的,我们在使用printf,stl容器…等等函数都是在使用库,
不然的话我们在使用这些东西时,明明你自己没有实现,程序缺依然能执行呢?

都是因为库的存在!

既然知道了库的存在,那我们肯定要见一见。
在这里插入图片描述

ldd命令可以查看可执行程序依赖的库,=>后指的是库的路径。
显示一下库的命令,可以看到,这些都是我们的库。
在这里插入图片描述
那么知道的库的存在总得知道库的名字吧
Linux
动态库:.so
静态库:.a

windows
动态库:.dll
静态库:.lib

动静态库的制作与使用:

当然是要先制作再使用啦,突然想起来小学题找语病~

我们先来讲解静态库,因为他简单。
将会分为3个步骤来走

  1. 怎么办
  2. 是什么
  3. 怎么办

好吧,与平时的三段论有些不同,但是无伤大雅。

静态库:

怎么办:

怎么办也就是制作,这里我们将会一步一步的带着大家走,会由一个例子来体现。

假设现在我们有两个你自己实现的库。
在这里插入图片描述
其中math中有add方法;string中有strcmp方法。

再假设我们现在要给你的室友抄C语言作业(实现库函数并写出在main函数中展示),但是你不能把你的原码给她,否则就谈不清谁抄的谁了。
在这里插入图片描述

方法一:

于是我们选择将源文件编译形成的.o文件给他,
直接gcc -c目标文件即可生成同名.o文件,不知道为啥这样做的的可以点击gcc与g++的认识
在这里插入图片描述
之后我们将这两个.o文件与头文件给他。
因为头文件就相当于一个使用方法。

在这里插入图片描述
那么我们的室友就写了一个main函数。
在这里插入图片描述
进行编译:
在这里插入图片描述
结果:
在这里插入图片描述
但是这样太挫了,如果头文件,.o文件太多就容易出错。

从这里我们就可以初见端倪,库的本质就是将.o文件打包。

方法二:

我们将.o文件进行打包给你的室友:
但并不是zip,tgz等打包,而是ar
他是一个归档工具,这里我们不需要管,只知道他与库的打包关系密切即可。用到的选项为rc,rc表示(replace and create)。

在这里插入图片描述
为什么起这么一个名字,别忘了我们是在制作静态库,库真正的名字是去掉前缀与后缀,真正的名字是myc(我的C库)
于是我们将libmyc.a库给室友进行编译。
在这里插入图片描述
运行依旧正确。
在这里插入图片描述
但这样依旧太矬了,我们在实际应用时都不会采取这种方法。

方法三:

先构成一个目录,包含头文件与库文件。
在这里插入图片描述
再将这个目录给你的舍友
将目录中的内容安装到系统。

在这里插入图片描述
在这里插入图片描述
随后即可像正常库文件使用,但是有一个注意点,我们的gcc/g++只认识C/C++的标准库,而mylib.a可以理解为第三方库。
故需要告诉编译器我们要链接的库
在这里插入图片描述
但是这种方法会污染库,我们是10分有9分的不愿意的!
不要忘记卸载你安装的库哦!

方法四:

在当前目录直接使用:
在这里插入图片描述
-I是指定你的头文件路径,-L是指定你库所在路径,-l是链接所在路径库的名字。

至于为什么我们为什么不用指定头文件呢,因为我们在.c文件中已经包含了。

是什么:

本质是一堆.o文件的打包

为什么:

提高效率!

开始动态库之前还要再说一个东西,我们之前学习时,说静态库是使用-static才可以生成,但是为什么我们并没有使用也说是静态库呢?

gcc/g++默认是动态链接的,但是如果没有动态库就会勉强使用需要你静态库的部分,其他能使用动态库还是使用动态库。

加上-static是强制全部使用静态库。

动态库:

我们的静态库用到了ar进行对静态库的打包,那动态库需要什么命令?

我们已经说过,打包的本质就是.o文件的打包,那我们的动态库也是需要.o文件,可是这个有一些不一样,需要

答案是编译器自己就可以完成!因为动态库的比率甚至高达90%,使用的是非常频繁啊。

持续更新…

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

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

相关文章

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

USB HID报告描述符学习

参考资料 HID 报告描述符 (qq.com)https://mp.weixin.qq.com/s?__bizMzU1ODI3MzQ1MA&mid2247485748&idx1&sn112bd8014eb96b03308b3b808549e8d4&chksmfc284ff1cb5fc6e770c2d2ece46c17bf2529901b45a357938978fa62163723556ad497b05c47&cur_album_id3340417…

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中,企业面临着不断增长的挑战,如提高效率、降低成本、满足客户需求等。为了应对这些挑战,企业需要不断创新并采用先进的技术解决方案。在这样的背景下,低代码开发和定制化物资管理成为了引领企业变…

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况:当你手持手机或相机准备拍摄视频时,心中已经构想了完美的画面,但却因为实际的限制无法捕捉到理想中的角度?这种情况可能会让人感到挫折。例如,如果想要从地面一只蚂蚁的视角拍摄&#xff…

罗宾斯《管理学》第15版笔记/课后习题/考研真题答案

第Ⅰ篇 管理导论 第1章 工作场所中的管理者和你 1.1 知识结构导图 1.2 考点难点归纳 1.3 课后习题详解 1.4 考研真题详解 附加模块一 管理史 知识结构导图 考点难点归纳 课后习题详解 考研真题详解 第2章 决 策 2.1 知识结构导图 2.2 考点难点归纳 2.3 课后习题详解…

linux的压缩与备份

一、打包 格式&#xff1a;tar -参数 <打包文件名> <打包的目标> 作用&#xff1a;将文件或者目录打包 重要参数&#xff1a;-f 使用归档文件&#xff0c;一定要加上这个参数 -c 新建打包文件 -x 解包文件 -t 可以不用解包就能查看包文件内容 -v 打包和解包时显…

《Fundamentals of Power Electronics》——Boost电路及仿真

Boost电路的拓扑结构如下所示&#xff1a; 下面是在simulink中搭建的一个Boost电路的仿真实验平台&#xff0c;其中直流输入电压为100V&#xff0c;电感值为1mH(模拟电阻为1毫欧)&#xff0c;电容值为470uF&#xff0c;负载为50欧姆&#xff0c;占空比选择为0.5&#xff0c;开关…

Cmake Learn

目录 1 常用命令 &#xff08;1&#xff09;configure_file &#xff08;2&#xff09;.cmake文件 &#xff08;3&#xff09; install &#xff08;4&#xff09;include_directories &#xff08;5&#xff09; add_subdirectory &#xff08;6&#xff09; find_libr…

C#队列(Queue)的基本使用

概述 在编程中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;它遵循FIFO&#xff08;先进先出&#xff09;的原则。在C#中&#xff0c;.NET Framework提供了Queue<T>类&#xff0c;它位于System.Collections.Generic命名空间下&#x…

Aiseesoft Blu-ray Player for Mac:蓝光播放器

Aiseesoft Blu-ray Player for Mac是一款功能强大且易于使用的蓝光播放器&#xff0c;专为Mac用户打造。它以其卓越的性能和简洁的操作界面&#xff0c;为用户带来了全新的高清蓝光播放体验。 Aiseesoft Blu-ray Player for Mac v6.6.50激活版下载 这款软件支持播放任何高质量的…

AI视频教程下载:构建一个ChatGPT股票配对交易机器人

ChatGPT及其后续版本GPT-4已经开始改变世界。人们对新机会感到兴奋&#xff0c;同时对我们社会可能受到的影响感到恐惧。这门课程结合了两个主题&#xff1a;AI和财务&#xff08;算法交易&#xff09;。 你将会学到的&#xff1a; 使用ChatGPT构建一个Python配对交易机器人 …

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 打家劫舍 II(难度⭐⭐)(67)

1. 题目解析 题目链接&#xff1a;213. 打家劫舍 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题是经典的“打家劫舍”问题的变种&#xff0c;原问题是在单排房屋中进行偷窃&#xff0c;而这个问题则是在…

Idea报错:无法访问org.springframework.boot.SpringApplication

在开发项目时&#xff0c;常常会遇到这种问题&#xff0c;报错信息如下图所示 版本号与jdk版本号存在对应关系&#xff0c;61.0对应jdk17&#xff0c;52.0对应jdk8 所以是某个依赖的版本太高&#xff0c;降低该依赖的版本即可 具体步骤&#xff1a; ①修改pom.xml中spring b…

Redis基本數據結構 ― String

Redis基本數據結構 ― String 介紹常用命令範例1. 為字串鍵設值/取得字串鍵的值2. 查看字串鍵的過期時間3. 如何為key設置時間?4. 如何刪除指定key?5. 如何增加value的值?6. 獲取value值的長度 介紹 字串鍵是Redis中最基本的鍵值對類型&#xff0c;這種類型的鍵值對會在數據…

Working with Design Patterns in Go (Golang)

introduction&#xff1a; 1、go及GoLand的下载安装&#xff1a; 安装包下载地址为&#xff1a;https://golang.org/dl/ 推荐使用国内地址:Go下载 - Go语言中文网 - Golang中文社区 2、Docker Docker允许开发中将应用、依赖、函数库、配置一起打包&#xff0c;形成可移植镜…

算法学习(5)-图的遍历

目录 什么是深度和广度优先 图的深度优先遍历-城市地图 图的广度优先遍历-最少转机 什么是深度和广度优先 使用深度优先搜索来遍历这个图的过程具体是&#xff1a; 首先从一个未走到过的顶点作为起始顶点&#xff0c; 比如以1号顶点作为起点。沿1号顶点的边去尝试访问其它未…

pycharm 安装“通义灵码“并测试

过程&#xff1a;“File>setting>Plugins” 提示&#xff1a; 翻译之后&#xff1a; 点击"接受"之后&#xff0c;提示一下图片&#xff0c;点击ok 安装完成&#xff1a; 安装完"通义灵码"之后&#xff0c;需要登陆&#xff0c;登陆后测试 参考…

NLP transformers - 文本分类

Text classification 文章目录 Text classification加载 IMDb 数据集Preprocess 预处理EvaluateTrainInference 本文翻译自&#xff1a;Text classification https://huggingface.co/docs/transformers/tasks/sequence_classification notebook : https://colab.research.googl…

FPGA高端项目:FPGA帧差算法多目标图像识别+目标跟踪,提供11套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA帧差算法单个目标图像识别目标跟踪 3、详细设计方案设计原理框图运动目标检测原理OV5640摄像头配置与采集OV7725摄像头配置与采集RGB视频流转AXI4-StreamVDMA图像缓存多目标帧差算法图像识别目标跟踪模块视频输出Xilinx系列FPGA工程源…

STM32之HAL开发——ADC入门介绍

ADC简介 模数转换&#xff0c;即Analog-to-Digital Converter&#xff0c;常称ADC&#xff0c;是指将连续变量的模拟信号转换为离散的数字信号的器件&#xff0c;比如将模温度感器产生的电信号转为控制芯片能处理的数字信号0101&#xff0c;这样ADC就建立了模拟世界的传感器和…
最新文章