嵌入式(十二)——库文件及静态库与动态库的制作与使用(附练习)

简介: 嵌入式(十二)——库文件及静态库与动态库的制作与使用(附练习)

前言


1.编译器gcc


静态库和动态库的制作与使用


2.调试器gdb


常用命令、调用内存错误


3.工程管理器make


makefile编写、多目录的makefile的编写


一、库文件


库文件:保存函数和变量,里面的函数和变量只能使用,但是看不到其实现

库函数(保存在库文件):printf scanf strcat

库文件的分类

静态库.a 保存的函数和变量,在编译阶段加载到可执行文件中

动态库.so 保存的函数和变量,在执行阶段加载到可执行文件中


使用静态库和动态库的区别(可执行文件的区别)

1.使用静态库编译出来的文件大小 > 使用动态库编译出来的可执行文件大小(影响:内存的开销)

2.使用静态库编译出来的执行文件速度 >(快于) 使用动态库编译出来的执行文件速度

3.使用静态库编译出来的执行文件升级 < 使用动态库编译出来的可执行文件升级

4.使用静态库编译出来的执行文件程序部署 > 使用动态库编译出来的可执行文件程序部署

库文件的存放路径:系统运行所需要的的库文件:/lib

第三方软件和工具运行所需要的的库:/usr/lib

编译时,编译器会自动到这两个目录里找所需要链接的库文件


1.1 制作静态库


1.将目标源文件编译成目标文件:gcc -c 目标源文件1 目标源文件2 (gcc -c add.c)

2.使用ar工具制作静态:ar -rcs(库不存在就创建,存在就更新)所要生成的库文件的名字(lib+库名+后缀.a) 目标文件

ar -rcs libadd.a add.o


1.2 使用静态库


-l:指定加载哪个静态库 -l库名(gcc demo.c -ladd)

-L:指定加载的库文件的存放路径(gcc demo.c -ladd -L/root/205/1107/)


1.3创建动态库


gcc -shared -fPIC -o 库名.so 源文件.c


1.4使用动态库


gcc 源文件.c ./库名.so -o 可执行文件名


0a2653c851af460fa595bd959398a8f1.png


练习


1.将add.c制作成静态库并使用

2.将sub.c add.c制作成libcal.a静态库并使用

3.按照图片,制作动态库


相关文章
|
NoSQL Linux 程序员
Linux:gdb调试器的解析+使用(超详细版)
Linux:gdb调试器的解析+使用(超详细版)
559 1
|
5G 芯片
带你读《无人机网络与通信》之二:空对地与空对空数据链路通信
本书针对无人机系统两个关键问题—通信组网和管控体系做了比较全面和深入的描述和探讨,特别是以大量笔墨分析了现有无线通信解决方案,对比了不同通信协议,得出了很有价值的研究结论。无人机的跨越式发展将涉及公共安全管理的问题,构建管控体系是当务之急,分级管理以及制定相应的适航标准是一件大事情,本书对此也进行了系统的、建设性的讨论。未来,高档无人机和无人机集群将对环境具有更强的感知能力和自适应能力,还有对任务的自规划和学习、调整能力,本书讨论的内容将为它们的发明、部署和监督提供宝贵的信息。
|
2月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
315 0
|
5月前
|
存储 安全
for...of循环遍历Set时,如何删除元素?
for...of循环遍历Set时,如何删除元素?
257 57
|
Ubuntu 安全 网络协议
|
7月前
|
Linux C语言
Linux读写锁源码分析
本文分析了读写锁的实现原理与应用场景,基于glibc 2.17源码。读写锁通过读引用计数、写线程ID、条件变量等实现,支持读优先(默认)和写优先模式。读优先时,写锁可能饥饿;写优先时,读线程需等待写锁释放。详细解析了`pthread_rwlock_t`数据结构及加解锁流程,并通过实验验证:2000个读线程与1个写线程测试下,读优先导致写锁饥饿,写优先则正常抢占锁。
178 19
|
10月前
|
编解码 前端开发 算法
R中单细胞RNA-seq分析教程 (7)
R中单细胞RNA-seq分析教程 (7)
267 20
R中单细胞RNA-seq分析教程 (7)
|
Web App开发 监控 前端开发
前端必备浏览器调试工具
【8月更文挑战第19天】前端必备浏览器调试工具
608 0
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
667 3
|
Oracle 安全 关系型数据库
ERP系统的云计算与SaaS模式:实现高效灵活的企业管理
【7月更文挑战第29天】 ERP系统的云计算与SaaS模式:实现高效灵活的企业管理
636 4
下一篇
开通oss服务