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

个人主页:东洛的克莱斯韦克-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.mzph.cn/news/844922.shtml

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

相关文章

DBeaver添加DM8驱动(maven下载和jar包下载配置)

DBeaver 24.0.3添加DM8驱动 下载DBeaver下载DM达梦驱动下载 安装配置使用自带Dameng自行添加达梦驱动 因为最近公司项目有信创要求,所以下载了达梦数据库。使用自带的达梦管理工具不是很方便,于是换了DBeaver。 哼哧哼哧安装好后,创建数据库连…

CSS:font-family作用

font-family作用 介绍代码举例示例分析示例分析 常用方法1.使用字体族2.使用系统字体3.使用Web字体4.使用CSS变量5.使用font-face规则 通用字体族补充 介绍 在Web开发中,font-family 是CSS的一个属性,用于指定一个网页元素应该使用哪些字体样式。font-f…

#centos7搭建php8+nginx环境#

场景:为了实现上传的pdf文件转成png图片,需要搭建一个php8nginx的运行环境,最后安装imagic扩展 安装顺序 php-> linux-> imagemagick -> ghostscript -> imagick 一:安装phpnginx环境 1、安装remi扩展源 remi源是Remi repository是包含最新…

浅谈云原生安全

一、云原生安全的层级概念 "4C" Code-Container-Cluster-Cloud 二、云原生各个层级的安全实践有哪些? 1、针对于Cloud针对的是公有云层面,其实就一点 1、使用主账号子角色,赋予最小权限原则进行资源管理。 2、对于Cluster 1、从C…

【数据结构】二叉树-堆(下)-链式二叉树

个人主页~ 二叉树-堆&#xff08;上&#xff09; 栈和队列 二叉树 四、堆的代码实现Heap.hHeap.ctest.c 五、堆的应用堆排序思想进行排序 六、二叉树链式结构的实现BTree.hBTree.ctest.c 四、堆的代码实现 Heap.h #pragma once#include <stdio.h> #include <stdlib…

如何在C#代码中判断当前C#的版本和dotnet版本

代码如下&#xff1a; using System.Reflection; using System.Runtime.InteropServices;var csharpVersion typeof(string).Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false).OfType<AssemblyFileVersionAttribute>().FirstOrDefault()?.…

09- Redis 中的 Stream 数据类型和应用场景

1. 介绍 Redis Stream 是 Redis 5.0 版本新增加的数据类型&#xff0c;Redis 专门为消息队列设计的数据类型。 在 Redis 5.0 Stream 没出来之前&#xff0c;消息队列的实现方式都有着各自的缺陷&#xff0c;例如&#xff1a; 发布订阅模式&#xff0c;不能持久化也就无法可靠…

Python魔法之旅-魔法方法(05)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

Linux系统使用Docker安装Drupal结合内网穿透实现远程访问管理后台

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux系统使用Docker安装Drupal…

golang开发 gorilla websocket的使用

很多APP都需要主动向用户推送消息&#xff0c;这就需要用到长连接的服务&#xff0c;即我们通常提到的websocket&#xff0c;同样也是使用socket服务&#xff0c;通信协议是基本类似的&#xff0c;在go中用的最多的、也是最简单的socket服务就是gorilla/websocket&#xff0c;它…

Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)

创建自定义的Hanndler /*** Package: com.datalyg.common.core.handler* ClassName: CommaSeparatedStringTypeHandler* Author: dujiayu* Description: 用于mybatis 解析逗号拼接字符串* Date: 2024/5/29 10:03* Version: 1.0*/ public class CommaSeparatedStringTypeHandle…

SAP Build引言

前言 SAP Build 似乎是一个整合了很多低代码或无代码产品的平台&#xff0c;最早的时候应该都是各自分开的几个产品&#xff0c;近年合并到一块上了SAP Build平台 现在看官网的介绍应该是有三四个产品被集成进来了&#xff0c;分别是SAP IRPA&#xff0c;SAP Workflow&#xf…

c# 输出二进制字符串

参考链接 C#二进制输出数据_c# 输出二进制 123.5的方法-CSDN博客https://blog.csdn.net/a497785609/article/details/4572112标准数字格式字符串 - .NET | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-strings#BFo…

linux 配置端口转发

当我们内网服务器没有公网IP&#xff0c;但需要将服务暴露出去时&#xff0c;可以采用如下方式&#xff0c;即通过跳板机&#xff08;带公网IP&#xff09;做转发&#xff0c;下面得例子演示将mysql 3306 服务暴露出去 192.168.10.25 运行mysql服务3306192.168.10.30跳板机&…

13、电科院FTU检测标准学习笔记-录波功能1

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…

js高级—基础深入总结

文章目录 1. 数据类型1.1. 常见数据类型1.2.数据类型判断&#xff1a;1.3.underfined与null的区别1.4.什么时候给变量赋值为null1.5. 严格区别变量类型与数据类型&#xff1a; 2. 数据变量和内存2.1. 什么是数据2.2. 什么是内存2.3. 什么是变量2.4.内存、数据、变量三者关系问题…

【面试题】Node.js高频面试题

简述 Node. js 基础概念 &#xff1f; Node.js是一个基于Chrome V8引擎的JavaScript运行环境。它使得JavaScript可以在服务器端运行&#xff0c;从而进行网络编程&#xff0c;如构建Web服务器、处理网络请求等。Node.js采用事件驱动、非阻塞I/O模型&#xff0c;使其轻量且高效…

使用DMS肌肉刺激仪的时候肌肉肿了是怎么回事?

当使用DMS&#xff08;深层肌肉刺激仪&#xff09;时&#xff0c;肌肉出现肿胀可能有多种原因。以下是对可能原因的分点表示和归纳&#xff1a; DMS治疗过程中的刺激反应&#xff1a; DMS治疗过程中&#xff0c;肌肉受到强烈的刺激&#xff0c;可能会导致局部肌肉炎症、水肿和…

【科普向】【文末附gpt升级秘笈】人工智能领域的风云变幻:从OpenAI到Anthropic的人才流动与技术走向

人工智能领域的风云变幻&#xff1a;从OpenAI到Anthropic的人才流动与技术走向 摘要&#xff1a;人工智能领域的竞争日趋激烈&#xff0c;技术巨头间的人才流动和团队重组成为常态。本文通过分析OpenAI前首席安全研究员Jan Leike加入Anthropic公司这一事件&#xff0c;探讨人工…

vue el-table使用、el-popover关闭、el-image大图预览

1、html <el-table :data"list" :header-cell-style"{ background: #F7F8F9 }"><el-table-column type"index" width"100px" label"序号"></el-table-column><el-table-column prop"pic" l…