linux关于cmake,makefile和gdb的使用

c文件的编译

安装环境(centos 7)

检查命令是否齐全

gcc --version
g++ --version
gdb–version

安装命令

yum -y install gcc-c++安装g++命令(用于编译c/c++文件)
yum -y install gcc安装gcc命令(用于编译c文件)
在这里插入图片描述
每个都出现版本号,证明已经安装成功

直接生成可执行文件

gcc 文件名 -o 生成文件名
在这里插入图片描述
一定要将命令写对,命令参数的顺序写对

预处理

g++ -E 源文件名 生成文件名.i
1.将头文件展开
2.宏替换
3.内联函数替换
4.注释省略
5.进行条件编译,#ifdef,#ifndef,#endif 等
6.生成.i文件
在这里插入图片描述

在这里插入图片描述

编译

g++ -s 生成文件名.i -o 生成文件名.s
1.汇总函数符号生成符号表
在这里插入图片描述

2.扫描,语法分析,语义分析,源代码分析,目标代码生成,目标代码优化
3.生成.s文件

汇编

g++ -c 生成文件名.s -o 生成文件名.o
1.转为二进制
2.虽然汇编是转成二进制,但是也会进行相应的检查,如果有函数只定义如果没有实现就会在这里发生报错
在这里插入图片描述
3.生成.o文件

链接

g++ -o 可执行文件名 -o 生成文件名.o
1.将各个文件进行链接,符号表进行对应,查找各个函数的地址,生成可执行文件
2.静态链接和动态链接
如果代码没有错误,最后会成功生成可执行文件
在这里插入图片描述
ldd 可执行文件名查看文件的链接情况

windowslinux
动态链接.dll.so
静态链接.lib.a

在这里插入图片描述

makefile

1.写入makefile文件

mybin:main.cgcc -g main.c -o mybin# 两者是等价的# gcc -o $@ $^# gcc -o mybin main.c .PHONY:clean
clean:rm -r mybin

在这里插入图片描述
2.使用make生成文件
make命令的时间对比是和上次修改的时间做对比,如果从上次make之后没有修改就不用生成新的(前提是make命令后生成的文件存在的情况下,如果不存在也是要重新生成的)
在这里插入图片描述
3.使用make clean进行文件的删除
在这里插入图片描述

gdb调试工具

gdb的安装
gdb的启动

1.使用-g添加可调式权限
gcc -g 源文件名 -o 生成可执行文件名
2.gdb 可执行文件名进入调试界面
在这里插入图片描述

gdb调试命令

1.l [数字]没有数字就从main开始,有数字就从头开始
在这里插入图片描述
有人说我为什么只有这么点儿代码,我的代码被吃了吗?
确实和我们想的不一样
我们只需要按回车,他就能把代码全部显出来,直到最后
在这里插入图片描述
2.r直接运行程序
在这里插入图片描述
3.b [行号]在指定行打断点
在这里插入图片描述
运行到断点处会停下来
如果我写一个死循环,会发生什么
在这里插入图片描述
他不会停下来
在这里插入图片描述

强制退出还是在gdb中,并且会显示从哪里跳出来的
在这里插入图片描述
info b查看断点
d [断点编号]只能通过断点编号才能将断点进行删除
在这里插入图片描述
n逐过程
s逐语句(进入函数)
逐过程
在这里插入图片描述
逐语句
在这里插入图片描述
在这里插入图片描述
disable/enable停用断点/启用断点
在这里插入图片描述

在21行添加的断点,运行,强制停止运行的时候,从26行跳出,证明21行的断点已经停用

运行,启用断点,逐过程,到达23行,证明断点启用成功
在这里插入图片描述
c跳到下一个断点的位置
在这里插入图片描述

finish运行完一个函数
在这里插入图片描述

在21行停下来,逐语句执行,进入函数到13行,然后finish命令直接跳到函数结束,证明是将函数执行完

bt调用堆栈
在这里插入图片描述

进入21行函数,调用堆栈,可以看见两个函数

display 变量名,取地址常显示监视变量
undisplay [变量编号]取消常显示
在这里插入图片描述

常数2也是可以进行监视的,并且需要取消监视的时候,可以连续取消多个监视

until 行号直接跳到某一行

如果中间有断点还是要停下来的
在这里插入图片描述

从第17行直接跳到23行
在这里插入图片描述
set var 变量名=value强制改变某个变量的值进行调试
在这里插入图片描述

批量化注释和取消

1.注释
ctrl+v选中要注释的列
shift+i
//
ESC
在这里插入图片描述

2.取消注释
ctrl+v选中需要注释的列
使用方向键进行选择需要取消注释的列(hjkl–左,下,上,右)或者使用方向键
d
在这里插入图片描述

查找命令

1.查找文件
find 路径 -name 文件名
2.查找命令
which 命令(ls,pwd,cd)
3.查找安装的文档,压缩包,头文件
whereis 头文件/压缩包/下载的文档

给用户分配权限

vim /etc/sudoers
在这里插入图片描述
这里原本(文档的100行左右)是没有user1的,我们按照上root写的形式抄下来,将名称给改成需要分配权限的用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/185662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习入门(第四天)——递归神经网络与词向量原理解读

一、RNN网络架构解读 常规神经网络并不能考虑时间序列的特征(比如前天昨天今天或者带有前后关联的特征),现在每个特征都是独立考虑的,那么如果有这样的特征,网络应该怎么学呢 而递归递归网络hidden这里的转回箭头&…

C/C+=内存管理

C/C内存管理以及动态内存的申请_c动态内存的申请与释放_Demo Test的博客-CSDN博客 问题是,这个0x0804 8000 到0xC 0000 0000之间,不止3GB,应该有47GB,该怎么解释呢?

4.1 Windows驱动开发:内核中进程与句柄互转

在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,EProcess结构表示一个进程,而HANDLE是一个句柄。 为了实…

Python 如何实现外观设计模式?什么是 Facade 外观设计模式?Python 设计模式示例代码

什么是(Facade)外观设计模式? 外观(Facade)设计模式是一种结构型设计模式,它提供了一个简化复杂系统接口的高级接口,使得系统更容易使用。外观模式通过定义一个高层接口,隐藏了系统…

2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]

恒温电蜡疗仪可将蜡熔化,利用蜡自身特点,能阻止热的传导、散热慢、气体和水分不易消失,保温性能优越。利用蜡能紧密贴于体表的可塑性,可加入其他药物协同进行治疗,也可将中药与蜡疗有机地结合在一起,产生柔…

【Linux】Linux进程间通信(二)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

《QT从基础到进阶·三十》QVariant的基础用法

很多时候,需要几种不同的数据类型需要传递,如果用结构体,又不大方便,容器保存的也只是一种数据类型,而QVariant则可以统统搞定。 QVariant可以保存QT和C常用类型,如果是自定义类型,比如struct,c…

什么是PWA(Progressive Web App)?它有哪些特点和优势?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

2023年中国逆流式冷却塔性能特点、应用领域及市场规模分析[图]

按冷却塔热交换时气流和水流方向不同的配置,机力通风冷却塔又可分为横流式冷却塔、逆流式冷却塔,目前主流的冷却塔型式为逆流式冷却塔,逆流式冷却塔(counterflowcoolingtower)是指水流在塔内垂直落下,气流方…

【C++学习手札】模拟实现string

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:缶ビール—みゆな 0:41━━━━━━️💟──────── 2:52 🔄 ◀️ ⏸ ▶️ ☰ &…

linux进程间通信之管道通信

Linux 进程间通信机制分三类:数据交互,同步,信号。理解了这些机制才能灵活运用操作系统提供的 IPC 工具。 一.管道 管道是一种文件形式,是内核的一块缓冲区。匿名管道只能用于具有亲缘关系的进程间通信,命名管道可以用…

在Linux上安装Oracle 数据库 11g (含静默方式安装)

好久没碰11g了,今天(2023年11月16日)因为有个需求又装了一遍。 在OCI上安装了一个Oracle Linux 6实例: $ uname -a Linux instance-20231116-1239-db11g 4.1.12-124.80.1.el6uek.x86_64 #2 SMP Mon Oct 9 02:32:10 PDT 2023 x86…