发布时间:2026/8/16 1:56:08
(七)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

相关新闻

2026/8/16 3:01:11

深度学习入门,从概念到实操一小时讲清楚!

文章目录 前言 一、深度学习和机器学习的区别? 二、深度学习常见的应用场景 三、深度学习代表算法——人工神经网络(ANN) 四、简单神经网络的搭建 五、强化神经网络的对的特征提取能力 总结 前言 深度学习作为人工智能领域的核心驱动力&…

2026/8/16 3:01:11

DeepSeek Harness 对比 WorkBuddy:一个给发动机,一个把活儿做完

DeepSeek Harness 和 WorkBuddy 看着很像:都能理解任务、调用工具、操作文件,也都在说 Agent。但真用起来,他俩根本不是同一种东西。 DeepSeek Harness 卖的是控制权,WorkBuddy 卖的是完成度。 前者给开发者一套可以拆、可以换、…

2026/8/16 3:01:11

154.ABAP BAPI 事务提交与回滚详细用法

摘要 SAP系统作为企业资源计划(ERP)领域的标杆,其底层开发语言ABAP(Advanced Business Application Programming)是每一位SAP技术人员的必修课。本文从SAP系统架构出发,深入剖析ABAP语言的核心运行机制,通过一个完整的采购订单创建实例,串联起数据字典、Open SQL、内表…

2026/8/16 3:01:11

Maxwell自定义材料库创建与管理:提升电磁仿真效率的关键实践

1. 从一次“材料焦虑”说起:为什么需要自定义材料库做电磁仿真的朋友,尤其是用Maxwell的,估计都遇到过这种场景:老板或者客户拿来一个新型号的磁芯,或者一种特殊的导电涂层,让你赶紧评估一下性能。你打开Ma…

2026/8/16 2:56:11

电赛H题车载平衡滚球系统实战:从PID控制到嵌入式开发全解析

最近在准备电赛的同学,是不是被各种“平衡”“控制”“运动系统”搞得有点头大?特别是看到“车载平衡滚球”这种题目,第一反应可能是:这得用上多少高深的算法和复杂的机械结构?别急,这篇文章就是来帮你“拆…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/15 4:56:16

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…