【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅

news2024/12/24 9:11:49

个人主页:东洛的克莱斯韦克-CSDN博客

祝福语:愿你拥抱自由的风

目录

vim编辑器

Linux编译器:gcc/g++使用

gcc和g++的选项

编译过程

动静态库的链接

Linux项目的自动化构建

生成可执行程序

清理可执行程序

Linux调试器-gdb使用

git和gitee


vim编辑器

vim是文本编辑器,可用于编写代码

【linux】如何优雅的使用vim编辑器-CSDN博客

Linux编译器:gcc/g++使用

保存代码的文件属于文本文件,计算机并不认识文本文件,需要把文本文件转成二进制文件代码才能运行。

gcc和g++就是这样的工具,gcc是用来编译C语言的,g++是用来编译C++的。小编只需讲清gcc即可,gcc的概念和选项完全可以迁移到g++。

gcc和g++的选项

下面是gcc和g++的选项,小编会用编译过程和实例详解一些常用选项

-E 只激活预处理 , 这个不生成文件 , 你需要把它重定向到一个输出文件里面
-S   编译到汇编语言不进行汇编和链接
-c   编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g  生成调试信息。 GNU 调试器可利用该信息。
-shared   此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库 .
-O0
-O1
-O2
-O3 编译器的优化选项的 4 个级别, -O0 表示没有优化 ,-O1 为缺省值, -O3 优化级别最高
-w   不生成任何警告信息。
-Wall 生成所有警告信息。

编译过程

预处理 ( 进行宏替换 )
预处理功能主要包括宏定义 , 文件包含 , 条件编译 , 去注释等
预处理指令是以 # 号开头的代码行
一般把预处理后的代码放到以.i为后缀的文件中,不是以.i为后缀也不影响。
编译(生成汇编)
在这个阶段中 ,gcc 首先要检查代码的规范性、是否有语法错误等 , 以确定代码的实际要做的工作 , 在检查 无误后,gcc 把代码翻译成汇编语言
一般把编译的代码放到以.s为后缀的文件中,不是以.s为后缀也不影响。
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的 “.s” 文件转成目标文件 ,这里的目标文件本质是计算机能看懂的二进制文件。
连接(生成可执行文件或库文件)
在成功编译之后 , 就进入了链接阶段.o文件已经是二进制文件了,为什么不是最终的可执行文件呢?

因为我们的代码中调用了一些C语言的库函数,而我们的代码中只有库函数的声明和调用,库函数的实现在C语言的库中,对于任何一门语言都需要将自己的库安装在系统的特定路径下。

而链接方式有两种,静态链接和动态链接

动静态库的链接

静态库是指编译链接时 , 把库文件的代码全部加入到可执行文件中 , 因此生成的文件比较大 , 但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
动态库与之相反 , 在编译链接时并没有把库文件的代码加入到可执行文件中 , 而是在程序执行时由运行时链接文件加载库, 这样可以节省系统的开销。动态库一般后缀名为 “.so”, gcc 在编译时默认使用动态库。
完成了链接之后 ,gcc 就可以生成可执行文件(默认情况下gcc选择动态链接)
动静态链接的优缺点:
静态链接之后不再需要依赖函数库,可独立存在,但文件的体积变得会很大。
动态链接之后文件的体积很小,但必须依赖函数库才能运行。
链接后的可执行程序可用 ./ 运行
如下示例(gcc不带选项时可以直接生成可执行程序)

Linux项目的自动化构建

我们每次要生成可执行程序都需要输入gcc或g++指令,清理可执行程序都需要用rm指令。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。我们需要不断输入gcc指令或g++指令和rm指令来完成上述操作吗?

答案是不需要,我们只需要在源文件目录下创建名为makefile的文件,将生成和清理可执行程序方案的指令保存到该文件,再通过make一个命令工具解释makefile文件中的指令完成项目的编译和清理工作。

也就是说makefile是文件,make是指令,以此来完成自动化构建。

那么怎么在在makefile文件中保存相关指令呢?假设我们有test.c源文件,想要生成test可执行程序。需要有如下格式

生成可执行程序

依赖关系,两个文件的依赖关系用冒号分隔,冒号左边的文件依赖于冒号右边的文件,如果可执行程序依赖多个源文件,多个源文件之间需要用冒号分隔。

test : test.c 

依赖方法,文件之间建立关系之后需要指定方法。

gcc test.c -o test

如下示例

清理可执行程序

rm依赖方法不需要构建文件之间的依赖关系,其依赖关系为空

如下示例

Linux调试器-gdb使用

程序的发布方式有两种, debug 模式和 release 模式
Linux gcc/g++ 出来的二进制程序,默认是 release 模式
要使用 gdb 调试,必须在源代码生成二进制程序的时候 , 加上 - g 选项
退出: ctrl + d quit
list l 行号:显示 binFile 源代码,接着上次的位置往下列,每次列 10 行。
list l 函数名:列出某个函数的源代码。
r run :运行程序。
n next :单条执行。
s step :进入函数调用
break ( b 行号:在某一行设置断点
break   函数名:在某个函数开头设置断点
info break :查看断点信息。
finish :执行到当前函数返回,然后挺下来等待命令
print ( p ) :打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。
set var :修改变量的值
continue ( c ) :从当前位置开始连续而非单步执行程序
run ( r ) :从开始连续而非单步执行程序
delete breakpoints :删除所有断点
delete breakpoints n :删除序号为 n 的断点
disable breakpoints :禁用断点
enable breakpoints :启用断点
info ( i breakpoints :参看当前设置了哪些断点
display  变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay :取消对先前设置的那些变量的跟踪
until X 行号:跳至 X
breaktrace ( bt ) :查看各级函数调用及参数
info i locals :查看当前栈帧局部变量的值
quit :退出 gdb

git和gitee

git是一款开源的软件,它即可以是服务端也可以是客户端。git的主要功能是保存代码的不同版本,也可以完成多人协作。

gitee是基于git内核写的网页版git,只需在官网注册账号即可使用。

在Linux操作系统下载git只需输入yum install git指令即可

如何将本地代码推送到远端仓库呢(gitee)

下载项目到本地
创建好一个放置代码的目录 .
git clone [url]
这里的 url 就是刚刚建立好的 项目 的链接
三板斧第一招 : git add
将代码放到刚才下载好的目录中
git add [文件名]
先将要提交的文件拷贝到仓库目录下
三板斧第二招 : git commit
提交改动到本地
git commit -m "日志信息"
提交的时候应该注明提交日志 , 描述改动的详细内容
如果是第一次使用git,会提示你输入两条指令,一条指令用来保存你的邮箱,一条保存你的名字
三板斧第三招 : git push
git push
同步到远端服务器上
需要填入用户名密码

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

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

相关文章

【嵌入式硬件】DRV8874电机驱动

目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…

C# FTP/SFTP 详解及连接 FTP/SFTP 方式示例汇总

文章目录 1、FTP/SFTP基础知识FTPSFTP 2、FTP连接示例3、SFTP连接示例4、总结 在软件开发中,文件传输是一个常见的需求。尤其是在不同的服务器之间传输文件时,FTP(文件传输协议)和SFTP(安全文件传输协议)成…

Scheduling Game Event

在游戏中管理事件:动画更新、对象碰撞等,如果没有清晰的理解事件是如何被组织和执行的,那么这将是一项艰巨的任务。这篇精华将解释调度器如何为你的游戏框架提供组织性和灵活性。 随着电脑游戏的日益复杂,实时事件和模拟几乎在今…

接口测试之XML响应断言

目录 XPath 基本语法XML 响应结果解析XML 响应结果断言 XML 响应数据 如何提取 AddResult 中的值&#xff1f; <soap:Body><AddResponse xmlns"http://tempuri.org/"><AddResult>4</AddResult></AddResponse> </soap:Body> …

VB6 MQTT为什么在物联网应用中使用 MQTT 而不是 HTTP?

有需要VBA,VB6,VB.NET等方面的MQTT的可以找我 一、MQTT简介 MQTT被广泛用于物联网(IoT:Internet of Things)领域&#xff0c;其中大量的设备需要进行实时通信和数据交换。它采用了一种发布/订阅(publish/subscribe)模型&#xff0c;其中消息的发送者&#xff08;发布者&#…

CobaltStrike基本渗透

目录 CobaltStrike简介 主要功能&#xff1a; 使用注意&#xff1a; 在使用CobaltStrike进行渗透测试时&#xff0c;务必遵守法律法规&#xff0c;并获得合法授权。 CobaltStrike安装 前提 安装 服务端安装 windows安装 CS基本使用 监听器配置 一些基本的攻击…

C++/C 线性插值

插值 插值&#xff0c;是根据已知的数据序列&#xff08;可以理解为你坐标中一系列离散的点&#xff09;&#xff0c;找到其中的规律&#xff0c;然后根据找到的这个规律&#xff0c;来对其中尚未有数据记录的点 应用 对缺失的数据进行补偿对图像进行放大缩小 通用公式 如上…

小白跟做江科大32单片机之按键控制LED

原理部分 1.LED部分使用的是这样的连接方式 2.传感器模块的电路图 滤波电容如果接地&#xff0c;一般用于滤波&#xff0c;在分析电路时就不用考虑。下面这个电路就是看A端和B端哪端的拉力大&#xff0c;就能把电压值对应到相应的电压值 比较器部分 如果A端电压>B端电压&am…

【MySQL】表的连接和复合查询

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;MySQL 目录 &#x1f449;&#x1f3fb;连接JOIN&#x1f449;&#x1f3fb;子查询&#x1f449;&#x1f3fb;合并查询 &#x1f449;&#x1f3fb;连接JOI…

【算法】位运算算法——消失的两个数字(困难)

题解&#xff1a;消失的两个数字(位运算算法) 目录 1.题目2.题解3.示例代码如下4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 本题要求时间复杂度O(N),空间复杂度O(1),分别否了我们 排序遍历 和 哈希数组 的想法。想要在规定时间/空间复杂度内完成本题&#xff0c;需要借…

辅导男朋友转算法岗第1天|tokenizer

文章目录 LLM训练流程LLM中的tokenizersBPEWordPieceUnigramSentencePiece&#xff08;使用BBPE或Unigram&#xff09; LLM训练流程 【大语言模型LLM基础之Tokenizer完全介绍-哔哩哔哩】 https://b23.tv/2kdTKxf LLM中的tokenizers 三种不同分词粒度的Tokenizers word-based…

python 获取网页乱码怎么解决

在使用python爬取网页时&#xff0c;经常会遇到乱码问题&#xff0c;一旦遇到乱码问题&#xff0c;就很难得到有用的信息。本人遇到乱码问题&#xff0c;一般有以下几个方式&#xff1a; 1、查看网页源码中的head标签&#xff0c;找到编码方式&#xff0c;例如&#xff1a; 可…

【UML用户指南】-02-UML基本元素的介绍(二)

1、语法和语义规则 命名——为事物、关系和图起的名字&#xff1b; 范围——使名字具有特定含义的语境&#xff1b; 可见性——这些名字如何让其他成分看见和使用&#xff1b; 完整性——事物如何正确、一致地相互联系&#xff1b; 执行——运行或模拟一个动态模型意味着什…

安卓 Flutter Channel 源码解析

Flutter 官方提供三种 Platform 与 Dart 端消息通信方式&#xff0c;他们分别是 MethodChannel 、 BasicMessageChannel 、 EventChannel MethodChanel &#xff1a;用于传递方法调用&#xff0c; MethodCallHandler 最终必须在 UI 线程通过 result. success(x) 方法返回…

【深度学习】YOLOv10实战:20行代码将笔记本摄像头改装成目标检测监控

目录 一、引言 二、YOLOv10视觉目标检测—原理概述 2.1 什么是YOLO 2.2 YOLO的网络结构 三、YOLOv10视觉目标检测—训练推理 3.1 YOLOv10安装 3.1.1 克隆项目 3.1.2 创建conda环境 3.1.3 下载并编译依赖 3.2 YOLOv10模型推理 3.2.1 模型下载 3.2.2 WebUI推理 …

成功解决“ImportError: cannot import name ‘mapping‘ from ‘collections‘”错误的全面指南

成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 一、引言 在Python编程中&#xff0c;当我们尝试从某个模块中导入某个名称时&…

上弦外媒新闻发稿:2024年度国外主流新闻媒体和海外媒体软文分发平台有哪些?

2024年度主流海外媒体新闻发稿和海外媒体软文分发平台有很多&#xff0c;下面是一些常见的和广受认可的平台&#xff1a; 主流新闻媒体 CNN - 美国知名新闻网络&#xff0c;覆盖广泛的国际新闻。BBC - 英国广播公司&#xff0c;提供全球新闻和深入报道。纽约时报 - 美国主流报…

UnityAPI学习之 事件函数(生命周期函数)的整体调用流程及细节

事件函数(生命周期函数)的整体调用流程 Reset() 这个函数会在用户首次添加该组件时或单击 Reset 按钮时被调用&#xff0c;且只在编辑器生效,可用于保存默认值 示例&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public cla…

Docker中布置Jenkins实现Android项目的自动化构建

因项目需要&#xff0c;要在服务器上使用Jenkins完成Android项目的自动化构建&#xff0c;但服务器上登录的账户没有管理员权限&#xff0c;无法用sudo命令&#xff0c;因此需要把相应环境布置在docker中。 环境搭建 docker容器相关命令 创建容器 docker create -it contai…

Android Handler机制使用及全面解析

前言 我是真的不想写这篇总结&#xff0c;说实话&#xff0c;关于Handler&#xff0c;全面且优秀的文章多的很。 但是这东西吧&#xff0c;还是想以自己的方式再去细看一下它的原理&#xff0c;实现源码&#xff0c;它的各种机制&#xff0c;在App中使用到的地方。 这样或许…