(七)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/8/16 1:54:24 阅读更多 →
八大排序系列(四):归并排序 —— 分治思想的另一条路径,稳定排序的代表

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

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

2026/8/16 1:54:24 阅读更多 →
函数从入门到进阶--知识点总结加代码实战

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

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

2026/8/16 1:54:24 阅读更多 →

最新新闻

Visual Studio 2022编译路径配置全解析:从核心概念到企业级最佳实践

Visual Studio 2022编译路径配置全解析:从核心概念到企业级最佳实践

1. 项目概述:为什么编译路径配置是项目管理的基石在Visual Studio 2022里新建一个项目,点击“生成解决方案”,然后去项目文件夹里翻找生成的exe或dll,这几乎是每个C/C#开发者都做过的事。但你是否曾疑惑过,为什么Debug…

2026/8/16 4:54:22 阅读更多 →
从Docker容器入门到生产实践:核心原理、网络数据与安全优化全解析

从Docker容器入门到生产实践:核心原理、网络数据与安全优化全解析

1. 从“Hello World”到“生产环境”:一个容器练习者的心路历程如果你在搜索引擎里敲下“docker容器练习”这几个字,大概率是想找个教程,跟着敲几条命令,让一个Nginx或者Redis跑起来,然后看着屏幕上“Hello World”或者…

2026/8/16 4:54:22 阅读更多 →
CentOS 7安装JDK 21完整指南:环境变量配置与生产环境实践

CentOS 7安装JDK 21完整指南:环境变量配置与生产环境实践

1. 项目概述:为什么在CentOS 7上安装JDK 21是个技术活? 最近在给一台老旧的测试服务器部署新的Java应用,环境是经典的CentOS 7。项目要求必须使用JDK 21,说是要用上最新的虚拟线程特性。我一开始觉得这还不是手到擒来&#xff1f…

2026/8/16 4:54:22 阅读更多 →
Blender免费材质模型资源库全攻略:从PBR原理到高效搜索管理

Blender免费材质模型资源库全攻略:从PBR原理到高效搜索管理

1. 从零到一:为什么你需要一个专属的材质模型库如果你刚开始接触Blender,或者已经用它做过几个项目,那你一定遇到过这样的场景:脑子里有个绝妙的创意,打开软件,建好基础模型,然后……卡住了。面…

2026/8/16 4:54:22 阅读更多 →
基于Auto.js与无障碍服务的Android自动化脚本开发实战

基于Auto.js与无障碍服务的Android自动化脚本开发实战

1. 项目初探:一个被低估的自动化利器如果你经常在手机上重复一些机械性的操作,比如每天定时打开某个App签到领积分、批量处理图片、或者在不同应用间来回切换复制粘贴信息,那你一定对“自动化”这三个字充满渴望。市面上有不少自动化工具&…

2026/8/16 4:54:22 阅读更多 →
售楼宝是什么?

售楼宝是什么?

售楼宝,全称“数字化售楼体验中心”,又称“互动售楼宝”或“HOUSEBOX售楼系统”。根据百度百科定义,售楼宝是北京流光溢彩公司研发的一套以触摸查询终端为载体的房地产销售与推广的数字化系统,集影视广告、动画、多媒体、电子楼书…

2026/8/16 4:53:22 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

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

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

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

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

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

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →