linux关于cmake,makefile和gdb的使用

news2024/10/6 12:34:47

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.c
	gcc -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.coloradmin.cn/o/1221682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel 熔断规则 (DegradeRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

Flutter笔记:桌面应用 窗口定制库 bitsdojo_window

Flutter笔记 桌面应用窗口管理库 bitsdojo_window 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/13446…

zookeperkafka学习

1、why kafka 优点 缺点kafka 吞吐量高,对批处理和异步处理做了大量的设计,因此Kafka可以得到非常高的性能。延迟也会高,不适合电商场景。RabbitMQ 如果有大量消息堆积在队列中,性能会急剧下降每秒处理几万到几十万的消息。如果…

如何用继承和多态来打印个人信息

1 问题 在python中的数据类型中,我们常常运用继承和多态。合理地使用继承和多态可以增强程序的可扩展性使代码更简洁。那么如何使用继承和多态来打印个人信息? 2 方法 打印基本信息添加子类,再定义一个class,可以直接从Person类继…

spring cloud openfeign 使用注意点

近期在做项目时给自己挖了一个坑,问题重现如下 使用的组件版本如下 spring boot 2.7.15,对应的 spring cloud 版本为 2021.0.5,其中 spring cloud 适配的 openfeign 版本是 3.1.5。 项目中使用的 feign 接口如下 public interface QueryApi…

高性能音乐流媒体服务Diosic

什么是 Diosic ? Diosic 是一个开源的基于网络的音乐收集服务器和流媒体。主要适合需要部署在硬件规格不高的服务器上的用户。Diosic 是使用 Rust 开发的,具有低内存使用率和高性能以及用于流媒体音乐的非常干净的界面。 安装 在群晖上以 Docker 方式安装。 在注…

Jenkins自动化部署一个Maven项目

Jenkins自动化部署 提示:本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…

赋能汽车企业数智化转型,鼎捷软件受邀出席“中国工业软件大会”

由中国国际智能产业博览会组委会、工业和信息化部、重庆市人民政府主办的“第三届中国工业软件大会”在重庆盛大召开。工业软件主管部委及政府部门、产业上下游企业代表和业内大咖、科教领域专家学者等800余位嘉宾代表齐聚,为加快制造业数字化转型和高质量发展建言献…

基于SpringBoot的SSMP整合案例(在Linux中发布项目的注意事项与具体步骤步骤)

前言与注意 这几天在Linux中上线之前的小项目时,遇到了很多的问题,Linux镜像的选择,jdk, mysql在linux中的下载,使用finallshell连接linux,使用tomcat连接linux中的数据库........ 在下面的注意事项中我会将…

人生阶段总结

--回顾一下我迷茫、努力、不开心又失败的阶段人生自我介绍一下,我是一个智力平平,记忆力差,适合自学的长睡眠者。 大专之前 国内的应试教育基本上不适合我,厌恶补课厌恶机械式听课刷题,所有的优势学科都是自学&#xf…

Sql Server 2017主从配置之:事务日志传送

使用事务日志传送模式搭建Sql Server 2017主从同步,该模式有一定的延迟,是通过3个不同的定时任务,将主库的日志同步到从库进行恢复来实现数据库同步操作。 环境准备 两台服务器,配置都是8g2核,50g硬盘,操…

CI/CD相关概念学习

文章目录 CI/CD相关概念学习前言CI/CD相关概念介绍集成地狱持续集成持续交付持续部署Devops CI/CD相关应用介绍JenkinsTekton PipelinesSpinnakerTravis CIGoCD CI/CD相关概念学习 前言 本文主要是介绍一些 CI/CD 相关的概念,通过阅读本文你将快速了解 CI/CD 是什么…

腾讯云4核8G服务器性能如何多少钱一年?

腾讯云服务器4核8G配置优惠价格表,轻量应用服务器和CVM云服务器均有活动,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,轻量应用服务器4核8G12M带宽一年446元、529元15个月,腾讯云百科txybk.com分…

在前端开发中,什么是CDN(Content Delivery Network)?它的作用是什么?

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

Python实验项目7 :tkinter GUI编程

(1)利用tkinter 制作界面,效果图如下: from tkinter import * # winTk() for i in range(1,20):Button(width5,height10,bg"black" if i%20 else"white").pack(side"left") win.geometry("8…

“可信区块链运行监测服务平台TBM发展研讨会”将于11月23日在北京召开

为推动区块链治理与创新,积极推进信任科技生态体系建设,中国信息通信研究院、中国移动设计院联合区块链服务网络(BSN)发展联盟共同发起建立了可信区块链运行监测服务平台(TBM)。 TBM平台通过对区块链系统的…

idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable

场景: idea警告某些maven依赖包有漏洞或者依赖传递有易受攻击包,如下: 解决: 1、打开idea设置,找到 File | Settings | Editor | Inspections 2、取消上述两项勾选即可

Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 信号爆x也许是所有IC人的噩梦,满屏的红色波形常让人头疼不已,但x信号的产生原因却常常只有几种,只要遵循一定的代码规范&#…

开源与闭源软件的辩论:对大模型技术发展的影响

目录 前言1 开源软件的优缺点1.1 开源软件的优点1.2 开源软件的缺点和挑战 2 闭源软件的优缺点2.1 闭源软件的优点2.2 闭源软件的缺点和挑战 3 大模型发展会走向哪一边结语 前言 近期,特斯拉CEO马斯克公开表示:OpenAI不该闭源,自家首款聊天机…

JVM判断对象是否存活之引用计数法、可达性分析

目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点: 扩展: 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活,分别是引用计数法和可达性分析算法,针对可达性分析算法STW时间长、…