linux工具gcc/g++/gdb/git的使用

news/2024/5/22 3:03:54/文章来源:https://blog.csdn.net/qq_64404343/article/details/130136331

目录

gcc/g++

 基本概念

指令集

函数库 (重要)

gdb使用 

基本概念 

指令集 

项目自动化构建工具make/makefile

进度条小程序 

​编辑

git三板斧

 创建仓库

git add 

git commit 

git push 

git status

git log 


gcc/g++

 基本概念

gcc/g++称为编译器

进行四个过程:

 预处理:头文件展开,去注释,条件编译,宏替换等等操作

 编译:检查语法,生成汇编代码

 汇编:将汇编代码转换成机器码

 链接:生成可执行文件或库文件

指令集

-o +文件:输出到该文件

-static:采用静态链接 

-g:生成调试信息 

gcc -E :文件预处理完毕后,不进行编译。该指令不生产文件,需要-o指令将文件内容输出到指定文件中。

gcc -S:文件编译完毕后,不进行汇编。生成文件后缀.s

gcc -c:文件汇编后,不进行链接。生成文件后缀.o

gcc +文件  -o 文件名:对文件执行这四个过程 -o指令:指定可执行程序名 

 

当然我们编译一个程序时,不必使用-E,-S,-c这些指令。

只需要gcc 文件 -o 指定文件名 即可完成  

函数库 (重要)

 c程序当中,如果要使用一个函数,不仅需要函数声明,还需要定义,但是我们所包含的头文件stdio.h当中,只有printf函数的声明,没有其定义,但是我们却可以完成调用?为什么呢?

这是因为系统把c函数的定义都放到libc.so.6这个库当中了,gcc会到默认的/usr/lib路径下进行查找,找到函数定义,这也就是动态链接过程。

函数库分为静态库和动态库,一般以.so结尾为动态库,.a结尾为静态库。 

 静态链接是指编译链接时把库文件代码全部拷贝到该文件,生成的文件比较大。

动态链接是指程序运行时链接库,到库中找到函数定义,然后完成调用。

gcc默认生成的文件是动态链接的。

 

gdb使用 

基本概念 

 gdb是linux下的调试器。

如果要对一个程序进行调试,在编译时一定要使用-g指令加入调试信息。

因为一般默认生成的程序是release版本,不支持调试。 

指令集 

  • list 或 l +行号或函数名:显示源代码,接着上次的位置每次列10行,如果是函数则从函数入口显示。
  • r或run :运行程序  
  • n或next:单条代码执行,相当于vs当中的f10,不进入函数。  
  • s或step:相当于vs当中f11,可以进入函数内部。 
  •  break或b+行号:在改行设置断点
  • break+函数名:在函数入口设置断点
  • info b:查看断点信息
  • finish:直接执行完改函数,然后停下来等待命令
  • continue:跳到下一个断点
  • until+n:一般在函数内部使用,跳到指定行
  • p+变量:打印变量值
  • display+变量名:追踪变量,每次停下来都显示该变量值
  • undisplay+变量号:取消对变量追踪
  • delete b:删除所有断点
  • delete b +n :删除n号断点
  • disable b n :禁用n号断点
  • enable b n:启用n号断点
  • bt:查看各级函数调用
  • set var :修改变量值
  • info locals:查看当前栈帧内局部变量值
  • print(p):打印表达式的值,通过表达式可以修改变量值或调用函数

项目自动化构建工具make/makefile

 make是指令,而makefile是文件。

通过make和makfile可以实现项目自动化编译,极大提高效率。

实例:

makefile内部:1.依赖关系

                         2.依赖方法 

 

 

  • make会在当前目录下找名为“makefile”或”Makefile“的文件 
  • make找到的是第一个目标文件,也就是test,如果test不存在,那它就会根据依赖关系和依赖方法去创建这个目标文件。
  • make会一层一层找依赖关系,直到编译出第一个目标文件
  • 找寻过程中,如果被依赖文件找不到,那么make直接退出,并报错,而对于所定义的命令错误,或者编译不成功,make不管。
  • make成功生成目标文件后,如果目标文件所依赖的文件内容没有改变,此时又进行make,那么该make是不被执行的。
  • 用.PHONY修饰的文件称为伪目标,该目标与第一个目标文件没有直接或间接关联,该目标总是可以被执行的。

进度条小程序 

 

git三板斧

 创建仓库

指令:git clone +gitee仓库的https 

git add 

将你要添加的文件先复制到仓库目录中。

然后进入仓库使用git add +文件名

git commit 

git commit -m “日志信息”   +文件   注意:日志信息一定要有 

git push 

commit完毕后,使用git push指令,然后代码就提交到gitee仓库了 

git status

 该指令用于查看git状态。

git log 

 查看git日志信息。

 

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

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

相关文章

[ 应急响应基础篇 ] evtx提取安全日志 事件查看器提取安全日志

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Java阶段一Day22

Java阶段一Day22 文章目录Java阶段一Day22线程安全synchronized教师总结新单词多线程多线程并发安全问题概念例synchronized关键字同步方法同步块在静态方法上使用synchronized互斥锁总结重点:多线程并发安全问题聊天室(续)实现服务端发送消息给客户端服务端转发消息给所有客户…

Android FrameWork 知识点与面试题整合~

1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度。 首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的。 UI布局的分析,可以有2块,一块就是Hierarchy Viewe…

SpringBoot集成Mybatis-Plus实现多租户动态数据源

1. 概述 最近接手一个多租户系统,多租户主要的就是租户之间的数据是相互隔离的,每个租户拥有自己独立的数据,相互之间不干扰。目前实现多租户主要有三种方案: 独立数据库 每个租户拥有自己单独的数据库,从物理上隔离了…

手写一个IO泄露监测框架

作者:长安皈故里 大家好,最近由于项目原因,对IO资源泄漏的监测进行了一番调研深入了解,发现IO泄漏监测框架实现成本比较低,效果很显著;同时由于IO监测涉及到反射,还了解到了通过一种巧妙的方式实…

通达信欧奈尔RPS指标公式详解

RPS相对强度指标,是国内的投资者根据威廉欧奈尔所著书籍《笑傲股市》中的RS评级改进的。 根据书中介绍: RS评级衡量了某一给定股票在过去52周内相对股市中其他股票的表现。市场上每一只股票都被指定了1~99范围内的某一数值,99代表相对强度最高…

YOLOV7运行步骤(推理、训练全过程)

下载源代码:点击下载 执行以下命令安装requirements.txt中的相关依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple官网下载权重yolov7.pt(测试使用)、yolov7-tiny.pt(训练使用,这里…

10 JS01——初识JS

目标: 1、初识JavaScript 2、JavaScript注释 3、JavaScript输入输出语句 一、初识JavaScript 1、JavaScript是什么 JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思) 脚本语言:不需要编译,运行过程…

Vue2-黑马(九)

0目录: (1)router-动态菜单 (2)vuex-入门 (3)vuex-mapState (1)router-动态菜单 我们点击按钮跳转到主页面,主页在制作动态菜单,路由的跳转方…

keil代码格式化快捷方法

美化当前文件:-n !E --styleansi -p -s4 -S -f -xW -w -xw 美化整个工程文件:-n "$E*.c" "$E*.h" --styleansi -p -s4 -S -f -xW -w -xw -R 当前时间:!E~E^E 添加文件注释:!E 函数功能注释:!E ~…

快排(动图详细版,快速理解)

注:本文主要介绍六大排序中的快排 文章目录前言一、三大法则1.1 Hoare法1.2 挖坑法1.3 双指针法(更加便捷)1.4 三种方法时间复杂度计算二、快排栈问题优化方式2.1 三数取中2.2 小区间优化三、非递归快排前言 快速排序是Hoare于1962年提出的一…

Linux高并发服务器(webserver)

一.有限状态机 它的转移函数表示系统从一个状态转移到另一个状态的条件 二.EPOLL 在内核中创建一个数据,这个数据有两个比较重要的数据,一个是需要检测的文件描述符的信息(红黑树),一个双向链表,存放检测到…

利用多专家模型解决长尾识别任务

来源:投稿 作者:TransforMe 编辑:学姐 贡献 提出了RoutIng Diverse Experts(RIDE),不仅可以减少所有类别的variance,并且还可以减少尾部类的bias。同时提升了头部和尾部的性能。 思路 目前存…

easyrecovery2023电脑文件数据恢复软件功能介绍

EasyRecovery功能全面,即便是没有经验的小白用户也可以很快上手,让你足不出户即可搞定常见的数据丢失问题。 在使用和操作存储设备期间,数据丢失问题在所难免。比如,误删除某个文件、不小心将有数据的分区格式化、误清空了有重要…

2023“认证杯”数学中国数学建模赛题浅析

2023年认证杯”数学中国数学建模如期开赛,本次比赛与妈杯,泰迪杯时间有点冲突。因此,个人精力有限,有些不可避免地错误欢迎大家指出。为了大家更方便的选题,我将为大家对四道题目进行简要的解析,以方便大家…

【vue3】04-vue基础语法补充及阶段案例

文章目录vue基础语法补充vue的computedvue的watch侦听书籍购物车案例vue基础语法补充 vue的computed computed:用于声明要在组件实例上暴露的计算属性。(官方文档描述) 我们已经知道,在模板中可以直接通过插值语法显示一些data中…

智能网卡相关知识(smart nic 、DPU)

网卡作为穿行在网络与计算之间的桥梁,是可以解决计算瓶颈的关键硬件。 随着CPU 密度和数据中心网络带宽的进一步提升,用户对预期性能的需求,系统运行平稳性都会有更高的要求。云厂商一方面面临巨大的成本压力,另一方面面临巨大的…

新一代异步IO框架 io_uring | 得物技术

1.Linux IO 模型分类 相比于kernel bypass 模式需要结合具体的硬件支撑来讲,native IO是日常工作中接触到比较多的一种,其中同步IO在较长一段时间内被广泛使用,通常我们接触到的IO操作主要分为网络IO和存储IO。在大流量高并发的今天&#xff…

光伏电池片技术N型迭代,机器视觉检测赋能完成产量“弯道超车”

电池片是光伏发电的核心部件,其技术路线和工艺水平直接影响光伏组件的发电效率和使用寿命。随着硅料、硅片技术逐渐接近其升级迭代空间的瓶颈,电池片环节正处于技术变革期,是光伏产业链中迭代最快的部分。P型中PERC电池片是现阶段市场的主流产…

C/C++每日一练(20230413)

目录 1. 与浮点数A最接近的分数B/C 🌟 2. 比较版本号 🌟🌟 3. 无重复字符的最长子串 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…