尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
嵌入式Linux--动态库与静态库
编译过程理解动态库与静态库,先要理解程序编译过程在进行编译的过程中程序会分为5个阶段,下面分开来解释预处理阶段主要解决字符替换如:宏的字符替换,头文件的声明复制到源文件编译主要是编译器进行它会进行词法分析、语法分析、语义分析、代码优化等复杂操作。汇编主要是将汇编指令翻译成二进制机器码,但是此时还没有链接库所以它是残缺的无法正常执行链接主要任务拼图组装解决地址引用链接器 (ld) 将所有的目标文件以及库文件组合在一起生成最终的可执行程序。合并段将各个 .o 文件的代码段、数据段合并统一排布在内存空间中。符号解析找到未定义的符号。例如 main.o 调用了 printf但 printf 的代码不在 main.o 里链接器会去 C 标准库libc.a 或 libc.so里找到 printf 的实现并将其合并进来。重定位修正地址。因为 .o 文件合并后函数和变量的最终内存地址发生了变化链接器会修正所有调用指令中的地址使其指向正确的内存位置。输入文件.o 文件、库文件输出文件可执行文件Linux 下默认为 a.out 或指定名称GCC 命令gcc main.o -o main库所以只有链接过后才是一个可以正常执行的程序静态库静态库是在程序编译链接阶段,链接器将静态库中被调用的代码直接复制到最终生成的可执行文件其不依赖外部的库文件,部署简单,运行时不需要查找库但是会将生成的可执行文件体积变大,在库更新时需要重新编译整个程序,多个程序进行会在内存生成多个相同的库代码副本动态库在编译时,可执行文件中只保留库函数的引用当需要调用时,查询动态库绑定到系统内存使用动态库链接的可执行文件体积小,相同的程序不需要重复占用内存部署相对复杂 容易陷入Dependency Hell 依赖地狱问题如何制作自己的库?静态库在制作自己的库之前我们首先需要先有一段封装好的code简单封装个sum求和// sum.c#includeSUM.hintsum(int*a){intsum;for(inti0;isizeof(*a);i){sum*(ai);}returnsum;}// SUM.h#ifndef_SUM_H#define_SUM_H//这里给出声明intsum(int*a);#endif下面采用GCC封装一下gcc-csum.c-osum.o#将.c编译为二进制.o文件ar crs libsum.a sum.o#将sum.o封装到静态库中ar t libsum.a#列出当前库中包含的.o文件如下: $ ar t libsum.a sum.o那么现在静态库就封装好了动态库依旧是上面的代码gcc-csum.c-osum.o-fPIC#fPIC表示产生的二进制与内存无关 可以提高兼容性gcc--shared-fPIC-olibsum.so sum.o#将.o封装进动态库使用自己的库使用静态库静态库就比较简单了将我们的libsum.a 链接到我们的main中gcc main.c-omain.exe-lsum-L./#链接静态库使用动态库libsum.so在使用的时候需要保证动态库要么在系统库目录中,要么为其配置环境变量gcc main.c-omain.exe-lsum-L./#-L指定头文件位置 -l指定库位置如果动态库与静态库重名时优先使用动态库
RELATED

相关推荐

JSON验证实际应用场景案例

JSON验证实际应用场景案例

介绍 JSON 验证是最基础也是最常用的开发操作。从代码编写到系统集成,它的应用场景几乎无处不在。本文整理 9 个实战案例。 实际应用场景 1. API 响应体调试 前端开发中,在浏览器控制台打印 API 返回的 JSON,复制到验证器中检查格式。确认…

📅 2026/9/1 21:55:42
PostgreSQL 因主库表空间错乱_缺少软链接、从库配置问题,导致主从复制故障【修复过程】

PostgreSQL 因主库表空间错乱_缺少软链接、从库配置问题,导致主从复制故障【修复过程】

修复后目录结构 /var/lib/pgsql/15/ ├── data/ # PGDATA 主目录 │ ├── pg_tblspc/ │ │ └── 24610 -> /var/lib/pgsql/15/pg_tps # 符号链接 │ ├── base/ # 默认表空间数据 │ ├── global/ …

📅 2026/9/13 22:31:48
什么是 JSON 验证工具?

什么是 JSON 验证工具?

什么是 JSON 验证工具? JSON 验证工具用于检查 JSON 数据的语法是否正确。JSON 语法非常严格——多了一个逗号、少了一个引号、括号不匹配都会导致解析失败。在开发中,99% 的 JSON 相关 Bug 都源于格式错误。验证工具能帮你秒级定位这些问题。 逐步操作…

📅 2026/9/1 22:18:54
MORE NEWS

更多资讯

📰

从单模型服务到LLM推理平台:模型部署框架全貌拆解

做模型部署做久了,你会发现一个尴尬的事实:在开发环境里跑通一个模型,和生产环境稳定服务一个模型,完全是两回事;而稳定服务一个模型,和把几十个大大小小的模型统一接入、统一调度、统一监控,又…

📰

MySQL表查看方法全解析:从基础到高级技巧

1. MySQL表查看方法全解析 作为关系型数据库的典型代表,MySQL的表管理是日常开发中最基础也最频繁的操作之一。当接手一个新项目或维护现有系统时,快速了解数据库中有哪些表、它们的结构如何,是每个开发者必须掌握的技能。本文将详细介绍MySQ…

📰

TFLite内存规划器详解:复用张量按生命周期压峰值内存

做端侧推理的兄弟应该都体会过这种场景:模型导出很顺利,板子上一跑就 OOM;或者只是把输入分辨率从 320 提到 416,内存直接翻倍。遇到这种问题,大多数时候不是算力不够,而是中间张量被无谓地“一人占一个坑”…

📰

不买转接盒:Android车机静态工程评测与接收端实现

1. 拆解这个标题背后的真实需求 第一次看到“DiPlay 静态工程评测”这个说法,很多人会以为又是一个车机投屏的教程。但把标题拆开看,核心其实落在三个词上: 静态工程评测 、 不买转接盒 、 Android 车机扮演接收端 。这三个词组合在一起…

📰

只检查放行项,还不知道漏掉了什么

2026-11-02更新:0.2.0新增有限输入集合的precision和recall逻辑界限。下面保留0.1.0原始发布记录,新版方法与限制见末节。 0.1.0:原始发布记录 我发布了 Rejected Check Audit,一个用来检查多阶段筛选分母的离线工具。它保留前置…

📰

FAST-LIO源码精读:从李群李代数到ikd-tree调参排错

简介:面向FAST-LIO论文阅读与源码剖析的中文学习文档,适合已具备ROS、C和SLAM基础,希望打通激光惯性里程计理论推导与工程实现的读者,也可供初学激光雷达惯性建图者作查漏补缺之用。内容先从李群李代数、流形、点云数据格式及VLP-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬