Linux 静态库的制作与使用

news/2024/4/25 16:32:29/文章来源:https://blog.csdn.net/mhyasadj/article/details/130309885

目录

  • 静态库
      • 1、 什么是库
      • 2、 静态库的制作
          • 2.1 命名规则与制作规则
      • 3、 静态库的使用

静态库

1、 什么是库

  • 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供使用者可以直接拿来用的变量、函数或类。
  • 库是一种特殊的程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
  • 库文件有两种,静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
  • 库的好处:1、代码保密 2、方便部署和分发

2、 静态库的制作

2.1 命名规则与制作规则

在这里插入图片描述

举例:

在这里插入图片描述

可以看到,有加减乘除这几个.c文件,使用如下指令,使其转化为.o文件

在这里插入图片描述

接着再使用ar工具将.o文件打包,成功生成了libcal.a文件

在这里插入图片描述

3、 静态库的使用

在这里插入图片描述

include下包含的是头文件;lib下包含的是库文件;src下包含的则是一些源码

进入到main.c文件中看一下:

在这里插入图片描述

接下来尝试编译main.c文件,报错如下,找不到head.h文件,预处理想要引入head.h则会报错。为什么会这样呢?因为使用gcc编译时用的是相对路径,也就是main.c同处于同一路径下才能被看到,而head.h处于include目录下,与main.c并不处于同一路径,所以预处理没办法找到head.h文件。

在这里插入图片描述

这时,可以使用gcc的一个可选项解决这个问题,-l

加载指定目录下的头文件

在这里插入图片描述

这时报了另一个错,函数的定义没有找到,所以需要用到gcc的另一个参数:-l

这个参数可以指定加载指定的库

在这里插入图片描述
最后的-L是指定编译的时候,搜索的库的路径。

注意,填入的是库的名字calc而不是库文件的名字libcalc.a

在这里插入图片描述

可以看到,成功生成了app文件,执行一下,结果如图。


📝我的个人主页
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️今天你做别人不想做的事,明天你就能做别人做不到的事♐


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

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

相关文章

多兴趣推荐召回模型:ComiRec

前言 多兴趣向量召回系列: 通过Youtube DNN推荐模型来理解推荐流程 多兴趣召回模型:MIND 推荐系统可以表达为序列推荐问题的形式,序列推荐任务是通过用户的历史行为来预测用户下一个感兴趣的item,这也与真实场景的推荐场景是符…

ERROR org.springframework.web.context.ContextLoader

项目启动时报错: ERROR org.springframework.web.context.ContextLoader - Context initialization failed java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.clearCache() 原因分析 这个错误的原因可能是因为 Spring 的不同…

Go 语言进阶与依赖管理

作者:非妃是公主 专栏:《Golang》 博客主页:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录 一、语言进阶1. 并发和并行2. 协程(Goroutine…

Ubuntu20.04软件安装大全

目录 Ubuntu20.04 软件安装大全前言1. Windows和Ubuntu双系统安装1.1 下载Ubuntu系统镜像1.2 磁盘分区1.3 GPT分区安装Ubuntu1.4 系统完成后的一些设置1.5 遇到的一些小bug 2. 换源2.1 apt换源2.2 pip换源 3. 显卡驱动安装3.1 卸载显卡驱动3.2 准备工作3.3 驱动安装3.4 验证 4.…

Python自动发送消息小脚本,可用于各种聊天框~

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

2023-04-23 算法面试中常见的动态规划问题

动态规划 1 什么是动态规划 以菲波那切数列求和为例,通过 1.普通的递归2.引入记忆数组memo3.自下而上地解决问题,即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for solving a complex problem by…

C嘎嘎~~ 【初识C++ 下篇】

初识C 下篇 1.引用1.1引用的概念1.2引用的特点1.3常引用1.4引用使用的场景1.5引用和指针的区别 2.指针空值 --- nullptr3.内联函数3.1 内联函数的概念3.2内联函数的使用场景3.3内联函数的特性 1.引用 1.1引用的概念 相信大家小时候, 肯定有小名、绰号、亲朋好友的昵…

Zuul源码解析(二)

Zuul 的自动配置 ZuulProxyAutoConfiguration 如何触发 如上图,在 spring.factory 中配置 ZuulProxyAutoConfiguration 自动配置了,直接点进去 如上图所示,发现这有个条件注解,需要有 org.springframework.cloud.netflix.zuul.Zu…

“支付+SaaS”赋能传统产业数字化转型

易观:传统支付业务利润空间在政策监管和市场竞争下不断被压缩,多家上市支付机构逐步将业务经营重点转移切入到企业交易环节,为企业提供包括SaaS服务、行业解决方案、营销服务及金融科技服务等在内的企业服务收入成为新的增长点。 伴随着“十四…

Linux网络服务之yum仓库

目录 一、yum仓库简介二. ftp搭建yum源三. 搭建国内在线源四. 本地源和在线yum同时使用五. 通过缓存的方式保存所下载的软件包六 . 制作yum仓库 一、yum仓库简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机…

Java入门教程||Java 继承||Java 重写(Override)与重载(Overload)

Java 继承 继承是所有 OOP 语言和 Java 语言不可缺少的组成部分。 继承是 Java 面向对象编程技术的一块基石,是面向对象的三大特征之一,也是实现软件复用的重要手段,继承可以理解为一个对象从另一个对象获取属性的过程。 如果类 A 是类 B …

Automa自动化爬取文本(一)

目录 介绍 下载地址 安装教程 爬取百度热搜 介绍 Automa 是一个免费、开源的 Chrome 扩展,它通过目前流行的 No Code 无代码方式,只需要拖拽模块就实现了浏览器自动化,比如自动填写表格、执行重复性任务。 在工作中,如果我们…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法(环境vs) if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少? _Bool原码 BOOL、TRUE、…

ERTEC200P-2 PROFINET设备完全开发手册(9-2)

9.2 运行AC1/AC4参考代码 修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 44 编译后下载到评估板运行AC4示例程序 在TIA中导入GSDML-V2.35-Siemens-ERTEC200pApp44-20210623.xml。新建项目,添加PLC和Devkit设备。 按照如下图所示配置模块&am…

基于vfw的局域网语音聊天室系统源码论文

语音视频聊天 UDP套接字的运用 在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,而UDP面向的是无连接的数据服务,其套接字的使用如图10所示。 图10 UDP套接字的使用 视频的捕获 利用VFW接口,视频捕获可以分为以下几个步骤: 建立视频采集窗口…

stm32在SDIO模式下SD写入错误的问题

1、问题描述 使用FAT32 f_write 多次执行写操作时,会报FR_DISK_ERR错误,而且是刚开始写不报错,写几次后会一直报错。 设断点跟踪到HAL_SD_WriteBlocks中,在调用SDMMC_CmdWriteMultiBlock时,会报SDMMC_ERROR_TX_UNDERR…

【MYSQL】Java的JDBC编程(idea连接数据库)

1. 配置 (1)新建一个项目 (2)Build System 那里选择Maven,下一步Create (3)配置pom.xml文件 首先查看自己的MYSQL版本:进入MySQL命令窗口 我的MYSQL版本是8.0版本的. 下一步,…

C/C++占位符,%x和%p的区别

遇到的问题 今天遇到了一个很奇怪的问题&#xff0c;当使用malloc分配了一个堆空间后&#xff0c;分别尝试用cout和printf尝试打印该地址&#xff0c;出现了两个地址不一样的情况&#xff1a; int *pp (int*)malloc(10*sizeof(int)); *pp 1234; cout << pp << …

常用数据加密

一、加密和解密 1、 加密 数据加密的基本过程&#xff0c;就是对原来为明 的文件或数据按某种算法进行处理&#xff0c;使其成为不可读的一段代码&#xff0c;通常称为 “密文”。通过这样的途径&#xff0c;来达到保护数据不被 非法人窃取、阅读的目的。 2、解密 加密的逆…

2023年,人工智能和数据训练呈现哪些新趋势?

最近&#xff0c;多才多艺的“全能网友”ChatGPT一次次火出圈。未来人工智能将以多快的速度、发展到何种地步&#xff1f;人们已经开始坐下来认真地探讨和思考。 我们生活在这个日新月异的时代。新的一年&#xff0c;人工智能的真正能力和应用场景又发生了哪些演进&#xff1f;…