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

news2024/9/30 11:37:06

目录

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.coloradmin.cn/o/438014.html

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

相关文章

集合详解之(五)Map集合

文章目录 🐒个人主页🏅JavaSE系列专栏📖前言:🎀Map集合的介绍🪅如何保证键的不重复性?(equals()与hashCode()方法的联用)🎀HashMap集合及常用方法&#x1f38…

电能计量自动化系统在用电管理上的应用

【摘要】:电能计量自动化系统在用电管理上的应用,不仅能够实现远程自动抄表,减少企业在人力资源成本上的投入,切实地维护企业的核心利益,创造出更多的经济效益。还能够通过装置在线监测与配网防窥电功能实现对电能计量…

D. Tokitsukaze, CSL and Stone Game(博弈)

Problem - D - Codeforces 时津风和CSL正在玩一个石头的小游戏。 一开始,有n个石子堆,其中第ii堆有aiai石子。两位玩家轮流走棋。时津风先走。每一回合,棋手选择一个非空的棋堆,并从该棋堆中准确地取出一块石头。如果在轮到他之前…

2 路 500MSPS/1GSPS/1.25GSPS 14 位直流耦合 AD 采集 FMC 子卡模块

板卡概述 FMC155 是一款基于 VITA57.1 标准的,实现 2 路 14-bit、 500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。该模块遵循 VITA57.1 规范,可直接与 FPGA 载卡配合使用,板 卡 ADC 器件采用 ADI 的 AD9680 芯片&#xf…

Python每日一练(20230420)

目录 1. 数组逐位判断 🌟 2. 交错字符串 🌟🌟 3. 二进制求和 🌟 4. 四舍六入五成双规则 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…

12、HOOK原理下

一、去符号和恢复符号 1.1 Stip和 Strip Type解释 strip在iOS中的作用是 剥掉目标文件中一些符号信息和调试信息,使文件变小。dead code strip : 死代码剥离、然后再去链接。那么strip在哪些地方不能起作用呢? 动态库 不能strip全局符号、因…

Windows下使用SSH密钥实现免密登陆Linux服务器

工具: win10、WinSCP 生成ssh密钥: 打开终端,使账号密码登录,输入命令 ssh-keygen -t rsa 会提示密钥存放路径,一般存放在默认路径,直接回车即可,中间会提示输入密码,这里需要注…

工作流自动化和RPA自动化,哪个更适合你?

2018年,一款名为《Overcooked!2》(又名“胡闹厨房”、“分手厨房”)的多人合作模拟类游戏风靡全球,在游戏中,玩家扮演厨师在充满各种障碍和危险的厨房里准备食材、烹饪、上菜和清理,需要在尽可能短的时间内…

window11开启wsl2

前言 以前玩linux,总是习惯装双系统,其实双系统特别麻烦。wsl现在的功能其实挺强大的,完全可以代替双系统,去完成一些在linux上的环境搭建。这篇文章记录下window11如何开启wsl2功能,并且安装ubuntu系统。 开启wsl2功…

2023自助洗车店系统解决方案共享洗车无人洗车风口

2021年中国汽车保有量预计超6.3亿辆,洗车市场需求巨大,传统洗车投资大、费用贵、成本高耗水大、占地面积大,而自助洗车机占据传统洗车耗水量1/4 ,占地面积1/70 ;节能环保得到政府的大力支持,且结合信息物联技术,实现智能化管理,高效能运营,灵活便捷服务,符合智慧城市发展原则,成…

开放式耳机有什么好处,列举几款性能高的开放式蓝牙耳机

骨传导耳机也称为“不入耳式”耳机,是一种通过颅骨、骨迷路、内耳淋巴液和听神经之间的信号传导,来达到听力保护目的的一种技术。由于它可以开放双耳,所以在跑步、骑行等运动时使用十分安全,可以避免外界的干扰。这种耳机在佩戴时…

AAAI 2023 | 基于Conductance的高效率和高质量的图聚类算法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! ╱ 作者简介╱ 林隆龙 博士、副教授 目前任职于西南大学计算机与信息科学学院 软件学院。2022年6月于华中科技大学计算机科学与技术学院获博士学位。目前主要研究兴趣包括(时序)社区挖掘、局部聚类、Personaliz…

Altium Designer 20 导出 Gerber 制造文件流程及注意事项

一、导出 Gerber 流程 设置原点:在Edit菜单中选择Origin-Set (快捷键E-O-S)定好原点,一般放在左下角附近即可。 放置分孔图表:在Place菜单中选择String放置“.Legend”(快捷键P-S)…

C++多线程编程(一) thread类初窥

多线程编程使我们的程序能够同时执行多项任务。 在C11以前,C没有标准的多线程库,只能使用C语言中的pthread,在C11之后,C标准库中增加了thread类用于多线程编程。thread类其实是对pthread的封装,不过更加好用&#xff…

ThreadLocal的相关面试题

ThreadLocal的特点:实现线程间的资源隔离,实现线程内的资源共享 2.原理是,每个线程都有一个ThreadLocalMap类型的成员变量,用来储存资源对象 1.调用set方法,就是以ThreadLocal自己作为key,资源对象作为val…

《花雕学AI》比尔・盖茨:AI 和 ChatGPT 可以改善人类生活,但也要防止滥用和危害

3月21号,微软创始人比尔盖茨,发表最新AI文章《人工智能时代已经开始——人工智能与手机、互联网一样具有革命性》,文章中表示:「自1980年首次看到图形用户界面(graphical user interface)以来,O…

通过logstash实现mysql与es的双向数据同步

参考题目 一种基于MySQL和Elasticsearch的数据同步方法及系统基于MySQL和Elasticsearch的数据同步方法一种基于MySQL和Elasticsearch的数据同步系统基于MySQL和Elasticsearch的数据同步技术 目录 1【理论调研】 方案1:使用Logstash实现数据同步 方案2&#xff1a…

Spring MVC基本认识与操作

SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。 先来介绍三个概念: SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前…

SpringCloud 微服务系列——【基础与服务注册中心详解】

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

文本批量翻译-批量翻译文件名

批量将英文翻译成中文的软件 批量将英文翻译成中文的软件的主要用途场景主要是在需要大量翻译英文文本到中文的场景下使用,例如: 商务文件翻译:许多企业需要将其商务文件,如合同、报告、信函等翻译成中文,以便其中文读…