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

这篇具有很好参考价值的文章主要介绍了【linux】动静态库的使用与制作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

浅谈一下动静态库:

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

都是因为库的存在!

既然知道了库的存在,那我们肯定要见一见。
【linux】动静态库的使用与制作,linux,运维,服务器

ldd命令可以查看可执行程序依赖的库,=>后指的是库的路径。
显示一下库的命令,可以看到,这些都是我们的库。
【linux】动静态库的使用与制作,linux,运维,服务器
那么知道的库的存在总得知道库的名字吧
Linux
动态库:.so
静态库:.a

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

动静态库的制作与使用:

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

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

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

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

静态库:

怎么办:

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

假设现在我们有两个你自己实现的库。
【linux】动静态库的使用与制作,linux,运维,服务器
其中math中有add方法;string中有strcmp方法。

再假设我们现在要给你的室友抄C语言作业(实现库函数并写出在main函数中展示),但是你不能把你的原码给她,否则就谈不清谁抄的谁了。
【linux】动静态库的使用与制作,linux,运维,服务器

方法一:

于是我们选择将源文件编译形成的.o文件给他,
直接gcc -c目标文件即可生成同名.o文件,不知道为啥这样做的的可以点击gcc与g++的认识
【linux】动静态库的使用与制作,linux,运维,服务器
之后我们将这两个.o文件与头文件给他。
因为头文件就相当于一个使用方法。

【linux】动静态库的使用与制作,linux,运维,服务器
那么我们的室友就写了一个main函数。
【linux】动静态库的使用与制作,linux,运维,服务器
进行编译:
【linux】动静态库的使用与制作,linux,运维,服务器
结果:
【linux】动静态库的使用与制作,linux,运维,服务器
但是这样太挫了,如果头文件,.o文件太多就容易出错。

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

方法二:

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

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

方法三:

先构成一个目录,包含头文件与库文件。
【linux】动静态库的使用与制作,linux,运维,服务器
再将这个目录给你的舍友
将目录中的内容安装到系统。

【linux】动静态库的使用与制作,linux,运维,服务器
【linux】动静态库的使用与制作,linux,运维,服务器
随后即可像正常库文件使用,但是有一个注意点,我们的gcc/g++只认识C/C++的标准库,而mylib.a可以理解为第三方库。
故需要告诉编译器我们要链接的库
【linux】动静态库的使用与制作,linux,运维,服务器
但是这种方法会污染库,我们是10分有9分的不愿意的!
不要忘记卸载你安装的库哦!

方法四:

在当前目录直接使用:
【linux】动静态库的使用与制作,linux,运维,服务器
-I是指定你的头文件路径,-L是指定你库所在路径,-l是链接所在路径库的名字。

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

是什么:

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

为什么:

提高效率!

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

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

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

动态库:

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

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

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

持续更新…文章来源地址https://www.toymoban.com/news/detail-860038.html

到了这里,关于【linux】动静态库的使用与制作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【linux深入剖析】深入理解软硬链接 | 动静态库的制作以及使用

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 软链接和硬链接是在Linux系统中常见的文件链接方式。 软链接(Symbolic Link): 软链接是一个指向目标文

    2024年04月13日
    浏览(46)
  • 【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤

    1、提高开发效率,让开发者所有的函数实现不用从零开始。 2、隐藏源代码。          库其实就是所有的.o文件用特定的方式进行打包形成一个文件,各个.o文件包含了源代码中的机器语言指令。 先将我们的.c文件或者是.cpp文件形成.o文件,指令为: gcc/g++ -c 要形成的.o文

    2024年04月17日
    浏览(49)
  • 运维 | 查看 Linux 服务器 IP 地址

    大多数在操作 Linux 系统时,我们经常需要知道服务器的 IP 比便于后续的一系列操作,这时候有快速查看主机 IP 的命令行操作,能够有效的帮助我们 本章节主要记录一些常用查看服务器 IP 的命令,希望对大家有所帮助。 查看 Linux 服务器的 IP 地址的命令大体上有以下几种。

    2024年04月27日
    浏览(81)
  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(74)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(92)
  • Linux—Web服务器(静态、动态网站的搭建)

    1.1www所用的协议 HTTP超文本传输协议,是互联网上最广泛的一种网络协议,所有的www文件都必须遵守这个标准 它是建立在TCP上一种的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理

    2024年02月06日
    浏览(55)
  • [Linux服务器 ] nginx 配置图片静态访问方法

    一.  Nginx安装 1.更新软件包列表:打开终端,并使用以下命令更新软件包列表: sudo yum update 2.安装 EPEL 存储库:EPEL 存储库提供了额外的软件包,其中包括 Nginx。使用以下命令安装 EPEL 存储库: sudo yum install epel-release 3.安装 Nginx:使用以下命令安装 Nginx: sudo yum install nginx

    2024年02月14日
    浏览(49)
  • 动静态库的理解、制作、使用。

    1.什么是库? 代码是无穷无尽的,当程序猿在写一些项目时,未必所有代码亲历亲为,他们可以在网上寻找大佬写过的一些有关需求的代码,这些代码可以让他们拿过来直接使用,而省去了许多精力。 把一些 代码进行打包 ,形成的便是库了。   上面所说,库就是将代码进行

    2024年01月24日
    浏览(49)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • 【Linux从入门到精通】动静态库的原理与制作详解

         本篇文章主要是 围绕动静态库的原理与制作进行展开讲解 的。其中涉及到了 inode的概念引入和软硬连接 的讲解。会结合实际操作对这些抽象的概念进行解释,希望会对你有所帮助。 文章目录 一、inode 概念 二、软硬链接 2、1 软连接 2、2 硬链接 三、动静态库概念 3、

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包