Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别

目录

一、工具的本质

二、一些常用的工具

1.yum

2.vim

1)vim的三种基本模式:

2)vim的基本操作

①命令模式下的基本操作:

②插入模式:

③底行模式:

3)vim的配置:让他变得更好用

3.gcc/g++的使用

基本使用方法:

编译过程

动静态链接

4.gdb命令行调试

3)调试指令

​编辑

5.初识M/makefile

补充:系统是如何得知源文件是否未被修改的?文件属性——三个时间

总结



一、工具的本质

工具在本质上也是一种特殊的指令

二、一些常用的工具

1.yum

常用选项:
yum list | grep 软件名:搜安指定软件;

yum install 软件名:安装指定软件;

yum remove 软件名:卸载指定软件

提示:yum需要root权限,故一般处于root身份或者sudo安装

示例:安装sl小火车

①sudo yum install -y sl或则root身份下的yun install -y sl(-y即不要过多询问直接安装)

②sl(运行该软件)

如果安装成功,屏幕中会出现如下小火车。

不知道是普通用户还是root?可用whoami指令查看

2.vim

介绍:Linux下的一款功能强大的编辑器(功能很多的记事本……)

使用方法:vim 先打开的文件名

1)vim的三种基本模式:

①命令模式:默认打开vim进入后所处的模式;

注意:在vim中的操作须在输入法为英语环境下进行。

②底行模式:在命令模式下,按住shift + :即可进入底行模式

注意光标在哪

在底行模式输入q再Enter可退出vim。

③插入模式:在命令模式下按键盘上的i键进入,进入后屏幕左下角会显示“--INSERT--”字样

在插入模式输入内容后,保存须在底行模式输入w再Enter

三种模式的切换:

命令模式+i==插入模式,插入模式按esc(键盘左上角)可退回命令模式;

命令模式+shit+:是底行模式,底行模式按esc(键盘左上角)可退回命令模式;

插入模式不能直接切换到底行模式,反之亦然,需要命令模式做中介。

画的好丑,读者见谅

在底行模式输入!q再Enter可退出vim。

2)vim的基本操作

①命令模式下的基本操作:

        光标定位:

        文本编辑:

撤销:u

撤销撤销:ctrl + r

②插入模式:

按期望编写文件即可

③底行模式:

3)vim的配置:让他变得更好用

3.gcc/g++的使用

若系统未安装gcc或者g++先安装:sudo yum install -y gcc或sudo yum install -y g++

基本使用方法:

gcc 源文件 -o 可执行文件名;g++ 源文件 -o 可执行文件名。

①若有多个源文件则在gcc/g++后跟着列出即可,中间空格‘  ’隔开;

②-o:是为生成的可执行文件命名,若无-o则默认生成a.out

编译过程

从源文件到可执行文件经过了如下几个步骤:

①预处理:头文件展开,宏定义替换,去注释,条件编译;

②编译:将源文件编译为汇编语言;

③汇编:将②中汇编语言进一步翻译为二进制机器语言;

此时的二进制文件可以被机器执行吗?

答:不能,在我们的代码中只有函数的调用,如pringf、scanf等,没有他们的实现!!他们的实现在C标准库,还需要第五步链接!

④链接:将③中的二进制代码与库中代码合并链接最后形成可执行程序。

什么库?干嘛的?比如printf这个函数,我们在编写代码时只是调用了他,却并没有实现,他的实现在C标准库中,即头文件"stdio.h"

动静态链接

在编译过程中的第五步链接又分为动态链接和静态链接:

如上述生成的hello可执行程序,若用file指令:file hello,在弹出的信息中可看到Linux系统采用了动态链接方式(大多数系统都是默认动态链接

4.gdb命令行调试

首先应该明确的是:在不同的开发环境调试的方式是不同的,但调试的思路一定是一样的。

1)gdb的安装:sudo yum install -y gdb

2)在Linux中gcc/g++默认生成的是release版本,若想调试应该在编译时带上-g,如:

这里插个题外话:为什么会有release和debug之分?

3)调试指令

5.初识M/makefile

拿上述的hello程序写一个最简单的makefile(在vim中编写):

补充:系统是如何得知源文件是否未被修改的?文件属性——三个时间

使用stat指令:stat hello可查看hello的详细信息

其中有三个时间:

所以系统是如何得知源文件是否未被修改的呢?


总结

本篇文章主要介绍了yum、vim、gcc/g++以及gbd的基本使用方法,同时补充了程序的编译过程和动静态链接过程。笔者水平较浅薄,难免有疏忽大意的地方,若有错误还请读者指出!!

文章读完可否给笔者一个免费的赞呢,一个免费的点赞就能让笔者高兴很久哦。

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

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

相关文章

JavaScript 一维数组转不含零的两个数

问题描述&#xff1a; /*** param {number} n* return {number[]}*/ var getNoZeroIntegers function(n) {for(let i 1;i<n;i){if(String(i).indexOf(0) -1&&String(n-i).indexOf(0) -1){return [i,n-i]}}};String类型indexOf()函数如果找不到字串则返回-1&…

力扣DAY60-61 | 热100 | 回溯:单词搜索、分割回文串

前言 中等 √ 继续回溯&#xff0c;不知咋地感觉这两题有点难度&#xff0c;是因为隔一天就手感生疏了吗&#xff1f; 单词搜索 我的题解 定义方向数组、二维访问数组。图搜索&#xff0c;向上下左右每个方向搜索&#xff0c;需要更新的信息&#xff1a;坐标、是否遍历过、…

超简单的git学习教程

本博客仅用于记录学习和使用 前提声明全部内容全部来自下面廖雪峰网站&#xff0c;如果侵权联系我删除 0.前言 相信有不少人被推荐那个游戏学习git&#xff0c;一个不止我一个完全没学习过的进去后一脸懵&#xff0c;半天都通不过一关然后就放弃了&#xff0c;我个人觉得那个…

【每日八股】复习 MySQL Day1:事务

文章目录 复习 MySQL Day1&#xff1a;事务MySQL 事务的四大特性&#xff1f;并发事务会出现什么问题&#xff1f;MySQL 事务的隔离级别&#xff1f;不同事务隔离级别下会发生什么问题&#xff1f;MVCC 的实现原理&#xff1f;核心数据结构版本链构建示例可见性判断算法MVCC 可…

在极狐GitLab 身份验证中如何使用 OIDC?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 使用 OpenID Connect 作为认证提供者 (BASIC SELF) 您可以使用极狐GitLab 作为客户端应用程序&#xff0c;与 OpenID Connec…

PHP腾讯云人脸核身生成 SDK 接口调用步骤使用签名

参考腾讯云官方文档&#xff1a; 人脸核身 生成 SDK 接口调用步骤使用签名_腾讯云 前提条件&#xff1a;成功获取NonceTicket。 获取参考文档&#xff1a; PHP腾讯云人脸核身获取NONCE ticket-CSDN博客 function getTxFaceSign(){$appId ;$userId ;$version 1.0.0;$tic…

每日一题算法——链表相交

链表相交 力扣题目链接 暴力解法:飘过 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode * cur headA;while(cur ! NULL){ListNode* curb headB;while(curb ! NULL){if(curbcur){return cur;}curb curb->next;}cu…

详解Windows(一)——系统盘下目录及文件详解

引言 你是否曾经好奇过电脑里那些神秘的文件夹都是干什么用的&#xff1f;为什么有些文件是.exe而有些是.dll&#xff1f;不同的图片格式.jpg和.png到底有什么区别&#xff1f;如果你对这些问题感到困惑&#xff0c;这篇文章就是为你准备的。今天&#xff0c;我们将以通俗易懂…

大模型赋能工业制造革新:10个显效可落地的应用场景

在工业4.0的汹涌浪潮中&#xff0c;制造业正面临着前所未有的转型挑战。传统制造模式在效率、成本、质量等方面逐渐难以满足市场需求&#xff0c;企业急需借助新技术实现数字化转型&#xff0c;以提升自身竞争力。在此背景下&#xff0c;基于先进的数据分析技术、大模型、知识图…

AI语音助手 React 组件使用js-audio-recorder实现,将获取到的语音转成base64发送给后端,后端接口返回文本内容

页面效果&#xff1a; js代码&#xff1a; import React, { useState, useRef, useEffect } from react; import { Layout, List, Input, Button, Avatar, Space, Typography, message } from antd; import { SendOutlined, UserOutlined, RobotOutlined, AudioOutlined, Stop…

pycharm无法识别到本地python的conda环境解决方法

问题一 现象描述&#xff1a; 本地已经安装了conda&#xff0c;但在pycharm中选择conda环境却识别不到&#xff0c; 解决方法&#xff1a;手动输入conda path&#xff0c;点击R eload environments基本就能修复&#xff0c;比如我的路径如下 /Users/test/conda/miniconda3/b…

PDK中technology file从tf格式转换为lef格式

在数字后端流程中需要导入technology file工艺文件&#xff0c;一般传统的PDK中都提供.tf形式&#xff0c;能够在Synopsys ICC中进行导入。但是由于Cadence Innovus不断地完善&#xff0c;更多的工程采用了其进行数字后端设计。不过Cadence Innovus导入的是.lef格式的工艺文件&…

UE虚幻4虚幻5动画蓝图调试,触发FellOutOfWorld事件和打印输出,继续DeepSeek输出

找到了一个pdf&#xff0c;本来想写个翻译的&#xff0c;但还是算了&#xff0c;大概看了下&#xff0c;这类文档很全面&#xff0c;内容很多&#xff0c;但都不是我要的&#xff0c;我想要一个动画蓝图&#xff0c;搜索Montage&#xff0c;或者Anim 只占了一行&#xff08;几百…

【Sa-Token】学习笔记05 - 踢人下线源码解析

目录 前言 强制注销 踢人下线 源码解析 前言 所谓踢人下线&#xff0c;核心操作就是找到指定 loginId 对应的 Token&#xff0c;并设置其失效。 上图为踢人下线后&#xff0c;前端应该用图像给出来让用户重新登录&#xff0c;而不是让前端收到一个描述着被下线 的JSON 强…

C语言==》字符串断行

示例代码 #include <stdio.h>int main(void) {printf("Heres one way to print a ");printf("long string.\n");printf("Heres another way to print a \ long string.\n");printf("Heres the newest way to print a ""lo…

Linux | I.MX6ULL 文件系统

01 本节所有的测试程序需要开发板有 Qt 环境来运行。我们提供的文件系统是由 yocto 裁剪整理得来的。之后我们会整理一份单独移植的 qt 系统。方便用户移植第三方软件。如果用户的文件系统非我们的出厂版本,请参考之前烧写章节重新烧写出厂文件系统。开发板启动需要输入登录…

网络原理 - 应用层, 传输层(UDP 和 TCP) 进阶, 网络层, 数据链路层 [Java EE]

目录 应用层 1. 应用层的作用 2. 自定义应用层协议 3. 应用层的 "通用协议格式" 3.1 xml 3.2 json 3.3 protobuffer (pd) 传输层 1. UDP 1.1 无连接 1.2 不可靠传输 1.3 面向数据报 1.4 全双工 1.5 缓冲区 1.6 UDP 数据报 2. TCP 2.1 有连接 …

如何将自己封装的组件发布到npm上:详细教程

如何将自己封装的组件发布到npm上&#xff1a;详细教程 作为前端开发者&#xff0c;我们经常从npm&#xff08;Node Package Manager&#xff09;上下载并使用各种第三方库和组件。然而&#xff0c;有时候我们可能会发现自己需要的功能在npm上并不存在&#xff0c;或者我们希望…

[OS_7] 访问操作系统对象 | offset | FHS | Handle

实验代码可以看去年暑假的这篇文章&#xff1a;【Linux】进程间通信&#xff1a;详解 VSCode使用 | 匿名管道 我们已经知道&#xff0c;进程从 execve 后的初始状态开始&#xff0c;可以通过 mmap 改变自己的地址空间&#xff0c;通过 fork 创建新的进程&#xff0c;再通过 exe…

关于TCP三次握手和四次挥手过程中的状态机、使用三次握手和四次挥手的原因、拥塞控制

关于传输层中的TCP协议&#xff0c;我们在之前的博客中对其报文格式、三次握手、四次挥手、流量控制、数据传输等机制进行了具体说明&#xff0c;接下来在前面所学的基础上&#xff0c;我们再来讲讲TCP中三次握手和四次挥手各阶段所处的状态机以及为什么要使用三次握手和四次挥…