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

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

前言


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.按照图片,制作动态库


相关文章
|
网络协议 物联网 芯片
三张图带你入门蓝牙规范
蓝牙自从2001年发布以来,从经典蓝牙发展到了BLE蓝牙,又于2017年引入了蓝牙mesh技术,核心规范版本就于2019年年底升级到了最新的5.2版本,很多同学对蓝牙很有兴趣,但也被会被蓝牙技术里繁多的概念搞迷糊,希望通过这篇文章带大家对蓝牙技术规范有一个基本的了解。本文的面向读者是对网络技术有一定了解但对蓝牙技术不熟悉的同学。
三张图带你入门蓝牙规范
|
存储 人工智能 算法
详细设计工具之盒图(N-S图)
详细设计工具之盒图(N-S图)
3427 0
详细设计工具之盒图(N-S图)
|
存储 安全
for...of循环遍历Set时,如何删除元素?
for...of循环遍历Set时,如何删除元素?
686 153
|
数据采集 Web App开发 监控
如何用Pyppeteer打造高并发无头浏览器采集方案
本文从电商行业数据采集痛点出发,结合 Pyppeteer 高并发无头浏览器技术,打造可配置代理的高效采集方案。通过爬虫代理突破 IP 限制,模拟真实用户行为,实现 Amazon 特价商品数据的稳定抓取与分析。代码示例详细展示了代理集成、并发控制及数据处理流程,实验验证效率提升超 4 倍。该方案助力商业决策、竞品分析,并支持技术扩展与创新应用。
488 13
如何用Pyppeteer打造高并发无头浏览器采集方案
|
9月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
773 0
|
Web App开发 监控 前端开发
前端必备浏览器调试工具
【8月更文挑战第19天】前端必备浏览器调试工具
969 0
|
Linux C语言
Linux读写锁源码分析
本文分析了读写锁的实现原理与应用场景,基于glibc 2.17源码。读写锁通过读引用计数、写线程ID、条件变量等实现,支持读优先(默认)和写优先模式。读优先时,写锁可能饥饿;写优先时,读线程需等待写锁释放。详细解析了`pthread_rwlock_t`数据结构及加解锁流程,并通过实验验证:2000个读线程与1个写线程测试下,读优先导致写锁饥饿,写优先则正常抢占锁。
439 19
|
传感器 算法 安全
蓝牙中频率跳变技术的原理及其应用
蓝牙中频率跳变技术的原理及其应用
1511 9
|
传感器 索引
预处理信号——将信号与不同开始时间对齐
预处理信号——将信号与不同开始时间对齐
683 0
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
1390 3