(七)gdb调试 及静态库共享库
一、gdb 常用调试命令前提编译程序必须加-g参数加入调试信息gcc main.c -g -o main否则 gdb 看不到源码。命令作用l/l 行号list显示源码l 10直接跳到第 10 行附近显示代码b 行号/b 函数名break设置断点b 20/b addinfo break查看所有断点信息显示断点编号delete 断点编号删除指定断点delete不加编号删除全部断点rrun从头运行程序遇到断点停下nnext单步执行不进入函数越过函数sstep单步执行进入调用的函数内部finish执行完当前函数跳出函数返回到调用处ccontinue继续运行直到下一个断点p 变量名print打印变量 / 表达式的值p abtbacktrace打印完整函数调用栈bt n只打印前 n 层调用栈qquit退出 gdb小提示gdb 敲回车会重复执行上一条命令。二、C 库基础头文件stdio.h——函数声明告诉编译器函数长什么样 库文件/usr/lib/libc.so.6——函数实现已经编译好的机器码集合。.h只放声明没有实现代码库文件存放真正编译完成的二进制实现代码库分为两大类静态库.a、共享 (动态) 库.so1、静态库.a本质多个.o目标文件归档打包而成使用ar工具制作。ar 参数c创建库文件r把目标文件添加进库vverbose显示操作过程生成静态库示例# 1.先把源码编译成目标文件 .o gcc -c add.c -o add.o gcc -c max.c -o max.o # 2.打包生成静态库 libfoo.a ar crv libfoo.a add.o max.o使用静态库链接生成可执行程序gcc main.o -L. -lfoo -o app-L.指定库搜索路径.代表当前目录-lfoo代表库名libfoo.a去掉lib前缀和.a后缀⚠️ 注意同一个目录下同时存在libfoo.a(静态) 和libfoo.so(动态)gcc优先链接动态库。静态库优缺点✅优点 链接阶段把库代码完整复制进可执行文件运行时不再依赖原库文件删掉libfoo.a程序照样跑。❌缺点可执行文件体积大每份程序都拷贝一份库代码内存浪费静态库更新后所有使用该库的程序必须重新编译链接才能用上新版本。2、共享库动态库.so运行的时候才加载库到内存多个进程可以共用内存里同一份库代码。编译生成动态库示例# -fPIC 生成位置无关代码动态库必备参数 gcc -c -fPIC add.c -o add.o gcc -c -fPIC max.c -o max.o # 生成共享库 libfoo.so gcc -shared add.o max.o -o libfoo.so链接使用动态库gcc main.o -L. -lfoo -o app动态库优缺点✅优点多个程序共享内存中一份库代码节省内存更新.so库文件只要接口不变程序不需要重新编译重启程序就使用新版库。❌缺点 运行依赖.so文件如果库丢失、版本不匹配程序直接运行失败。编译小技巧gcc 可以一步编译不需要手动生成.o# 直接用c源码链接静态库 gcc main.c -L. -lfoo -o appLD_LIBRARY_PATH 环境变量动态库运行时搜索路径。 gcc 编译时通过-L找库程序运行时不会读取 - L 参数操作系统会去系统库目录和LD_LIBRARY_PATH环境变量指定目录寻找.so。# 设置临时环境变量当前终端生效 export LD_LIBRARY_PATH.:$LD_LIBRARY_PATH ./app补充编译器默认自动链接 libc 标准库数学库libm需要手动加-lm。补充对比小结项目静态库.a动态共享库.so链接时机编译链接阶段拷贝代码编译只记录引用运行时加载运行依赖不依赖原库文件必须存在对应 so 文件内存占用每个程序自带一份库代码占用大多进程共享内存一份库库更新程序需要重新编译链接接口兼容时无需重编译制作工具argcc -shared

相关新闻

深入解析STM32F429系统架构:从总线矩阵到DMA与中断协同设计

深入解析STM32F429系统架构:从总线矩阵到DMA与中断协同设计

1. 从“单片机”到“微控制器”:STM32F429的定位转变很多工程师朋友一提到STM32,脑子里蹦出来的第一个词可能还是“单片机”。这个称呼没错,但用在STM32F429这类芯片上,就显得有点“委屈”它了。传统的8051、AVR单片机&#xff0c…

2026/10/13 16:20:08 阅读更多 →
八大排序系列(四):归并排序 —— 分治思想的另一条路径,稳定排序的代表

八大排序系列(四):归并排序 —— 分治思想的另一条路径,稳定排序的代表

八大排序系列(四):归并排序 —— 分治思想的另一条路径,稳定排序的代表上一篇我们拆解了快速排序 —— 这个靠「分区 递归」把排序效率拉到 O (nlogn) 的工业级算法,结尾留下了一个核心问题:同样是分治思想…

2026/10/8 11:07:06 阅读更多 →
函数从入门到进阶--知识点总结加代码实战

函数从入门到进阶--知识点总结加代码实战

函数从入门到进阶 很多初学C语言的朋友,学到 函数 这一章都会卡壳: 看不懂形参实参、不知道返回值怎么用、分不清全局/局部变量、写代码只会堆main函数、代码杂乱冗余还容易报错。 今天这篇博客,不堆砌概念,全程纯干货可直接运行的…

2026/9/29 8:19:48 阅读更多 →

最新新闻

Python金融科技实战:量化回测、风控模型与工程化落地

Python金融科技实战:量化回测、风控模型与工程化落地

先说个背景。我前两年参与过一个从零搭建的量化信号系统的项目,技术栈里最核心的就是 Python。那段时间接触了不少金融科技方向的案例和团队,越来越感觉 Python 在 FinTech 里几乎是无处不在的。无论是量化交易、风险模型、信贷风控,还是财报…

2026/10/13 16:20:34 阅读更多 →
WooCommerce 3.5.2 安装包获取与环境搭建完整指南

WooCommerce 3.5.2 安装包获取与环境搭建完整指南

简介:Woocommerce 3.5.2 安装包面向使用 WordPress 搭建在线商店的开发者与店主,提供创建和管理电商站点所需的完整插件文件,适合具备一定 WordPress 基础、希望自行部署或研究插件结构的用户。压缩包共 1099 个文件,约 3.73MB&am…

2026/10/13 16:20:34 阅读更多 →
Python在金融科技中的实战应用:数据处理、量化回测与风控建模

Python在金融科技中的实战应用:数据处理、量化回测与风控建模

Python这几年在金融圈的热度,不用我多说。如果你去翻各大券商、基金公司、银行金融科技岗的招聘要求,Python基本是标配技能。我身边不少做量化、风控、数据分析的朋友,日常工作的主力工具就是Python,从拉数据、清洗、建模到生成报…

2026/10/13 16:20:34 阅读更多 →
t3code 跨平台 CLI 工具拆解:Electron 与 CLI 双形态架构及安装配置指南

t3code 跨平台 CLI 工具拆解:Electron 与 CLI 双形态架构及安装配置指南

1. 从 t3code 这个标题说起:一个跨平台 CLI 工具的真实拆解第一次看到 t3code 这个名字,我下意识把它和一堆 CLI 工具联想到了一起。原因很简单,最近一两年围绕终端体验的工具爆发式增长,从 codex cli 到 openspec cli&#xff0c…

2026/10/13 16:20:34 阅读更多 →
PS5辅助工具AnyPS5:游戏库管理、存档备份与远程下载实践

PS5辅助工具AnyPS5:游戏库管理、存档备份与远程下载实践

最近整理我那台 PS5 的时候,发现一个挺尴尬的现实:机器里已经装了几十款数字版和实体版游戏,但每次想找某个老游戏,要么在首页翻半天,要么得先开机再进内容库按字母一个个找。主机自带的界面其实已经做得不错&#xff…

2026/10/13 16:20:34 阅读更多 →
从直连到聚合:大模型API对接的架构演进与实战避坑指南

从直连到聚合:大模型API对接的架构演进与实战避坑指南

1. 从直连到聚合:API对接思路的转变2026年开年到现在,我陆续参与了三个不同规模的AI应用项目,从智能客服到内容生成工具,再到一个内部知识库问答系统。这三个项目有一个共同点:都需要对接大模型API。而在这三个项目的推…

2026/10/13 16:19:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →