Linux基础3-基础工具2(vim详解,gcc详解)

news2024/12/23 14:09:23

上篇文章:Linux基础3-基础工具1(什么是工具,yum,vim基础)-CSDN博客

本章重点:

1. vim详解

2. gcc详解

目录

一. vim详解 

1.1 命令模式

1.2 插入模式

1.3 底行模式 

二. gcc/g++

2.1 程序的翻译过程(c/c++代码执行过程)

2.2 gcc/g++使用说明 

2.3 动态链接与静态链接

2.4 查看Linux文件的链接方式和使用的标准库

2.5 gcc/g++直接生成可执行文件

2.6 gcc使用静态链接

三. 下章重点 

3.1 自动化构建工具make,makefile

3.2 Linux调试器gbd的是用


一. vim详解 

        我们知道vim常用的三种模式(命令模式,插入模式,底行模式)。这三种模式的转化图如下

1.1 命令模式

总结比较常用的vim命令

定位操作

        shift + 4($符号)将光标定位到该行的末尾(行右

        shift + 6(^符号)将光标定位到该行的行首(行左

        shift + g(G)      将光标定位到底部(底部

        gg                         将光标定位到顶部(顶部

文件操作

复制:文件所在行输入 yy,n(数字)+yy可以复制n行

粘贴:文件所在行输入p(输入p只粘贴一次,输入n+p会粘贴n次)

删除:文件所在行输入dd,n + dd可以删除n行

剪切:在一个光标所在处输入dd,在林另一个光标所在处输入 p

撤销:输入 u

取消撤销:ctrl + r

编辑操作 

文件所在行替换大小写:shirt + ~

批量化替换:shift + r 进入替换模式即可

行内删除:x向左删除,X向右删除(可以输入n删除n个,并且支持使用p进行剪切)

1.2 插入模式

        命名模式输入 i 或o或 a 即可进入插入模式,插入模式下直接输入即可插入文本

1.3 底行模式 

        命名模式下输入 shift : 即可进入底行模式。

w 写入        q 退出        wq 写入并退出        w!强制写入        q!强制退出

vs + 文件名        可以分屏(但无论分多少屏幕,都只有一个光标)

ctrl w w即可切换到其他屏幕。

! 加 shell 命名 即可在不退出文件的情况下执行linux命令

%s/printf/cout/g        即可将printf都替换成cout

二. gcc/g++

        gcc/g++是Linux中的编译器。用于编译c/c++代码

2.1 程序的翻译过程(c/c++代码执行过程)

1. 预编译:去掉注释,头文件展开,宏替换,条件编译

2. 编译:检查语法,将代码转换为汇编代码

3. 汇编:将汇编代码转化为可重定向的二进制机器指令(不可执行的二进制目标文件)

4. 链接:链接多个二进制目标文件,形成可执行的目标文件

2.2 gcc/g++使用说明 

例如:我们想编译运行下列代码,文件名字为 test.c

#include<stdio.h>

int main()
{
  printf("hello wolrd!\n");
  return 0;
}

1. 预编译

gcc -E test.c -o test.i 

-E #执行程序的预编译工作,完成后停下来

-o #指形成文件的临时文件名称

2. 编译

gcc -S test.i -o test.s

-S #表示完成程序的编译阶段,变成汇编代码之后,停下来

3. 汇编

gcc -c test.s -o test.o

#完成程序的汇编工作,生成可重定向的不可执行二进制文件。停下来

4. 链接

gcc test.o -o test

#链接的过程,将库中的代码和我们自己写的代码链接起来,形成可执行的二进制文件

5. 运行test

./test

# ./ + 可执行二进制文件    即可运行

2.3 动态链接与静态链接

        链接的本质(关联我们的代码和库代码)

        我们写代码只是写了代码的调用,没有写对应的实现。只有当我们链接库代码之后,标准库的实现代码才能和我们的代码关联

动态链接:讲我们的程序和通过连接器和标准库关联,需要使用标准库的时候去标准库中找

静态链接:链接的时候,不和标准库关联,而是在我们程序内部,将要用的方法,给我们拷贝一份,就完成了静态链接

        动静态链接的优缺点:

动态链接:由于没有拷贝,形成的可执行文件非常小,节省资源(占用内存,磁盘小,也方便别人下载)。

静态链接:不受库文件的升级或者删除,但是形成的可执行文件非常大,且如果有多个可执行文件,会造成代码高度重复。

2.4 查看Linux文件的链接方式和使用的标准库

前置知识:

1. Linux文件库的命名

动态库:libxxxxx.so

静态库:linxxxxx.a

2. file + 文件 (可以查看文件的链接方式)

3. ldd + 文件 (可以查看文件使用的标准库)

 C语言

C++

从图中也可得出:gcc/g++ 默认使用的是动态链接

运行结果如下:

2.5 gcc/g++直接生成可执行文件

gcc test.c -o test
# gcc .c文件 -o 可执行目标文件
# 即可直接生成可执行文件

举例:

2.6 gcc使用静态链接

        1. 如果没有下载.c静态库需要先下载

        2. 使用静态链接

gcc test.c -o test.s -static

# gcc 代码文件.c -o 可执行目标文件 -static
# 目标文件可以使用.s进行标识

举例:

可以看出静态链接的可执行文件非常大

test.s 比 test 大 100倍左右

静态链接无法ldd

使用file进行查看,为静态链接

像shell python 这种脚本语言在linux中可以直接运行

甚至使用chmod+可执行权限就能直接运行

三. 下章重点 

3.1 自动化构建工具make,makefile

3.2 Linux调试器gbd的是用

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

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

相关文章

海报生成用什么软件好?小白看这里

想要让你的信息在人群中脱颖而出吗&#xff1f;一张精心设计的海报无疑是最佳选择。 无论是宣传活动、展示作品还是装饰空间&#xff0c;海报都能以视觉的力量抓住人们的眼球。 但海报制作软件哪个好呢&#xff1f;别急&#xff0c;这里有五个超实用的海报制作软件&#xff0…

「漏洞复现」紫光电子档案管理系统 selectFileRemote SQL注入漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

二维码扫码模组国产麒麟系统C语言SDK二次开发

在国产系统麒麟V10系统上面上使用的 USB HID POS 的 SDK 包. 特别说明涉及到永久参数的函数接口,请勿频繁使用.如果是出厂或者偶尔设置推荐使用永久参数,如果是每次读码都进行参数修改,请使用临时参数.频繁进行永久参数操作会减小扫码设备的使用寿命. #include <stdio.h>…

零基础国产GD32单片机编程入门(二十五)USB口介绍及CDC类虚拟串口通讯详解及源码

文章目录 一.概要二.USB2.0基本介绍及虚拟串口介绍三.GD32单片机USB模块框图四.GD32单片机USB设备模式五.GD32F103C8T6 USB设备CDC类六.配置一个USB虚拟串口收发例程七.工程源代码下载八.小结 一.概要 GD32F103C8T6 USB虚拟串口是一种采用GD32F103C8T6单片机&#xff0c;通过U…

android10 系统定制:增加应用使用数据埋点,应用使用时长统计

需求意在统计应用的使用时长和开始结束时间,最终生成一个文件可以直观看出什么时候进入了哪个应用、什么时候退出,如图: 每行记录了应用的进入或退出,以逗号分割。分别记录了事件开始时间,应用包名,进入或退出(1或2),应用名称。 根据上面的数据记录可以看出:2024-08…

B2C电商接口解决方案||搭建电商项目必备电商接口

01 涉及接口 电商接口&#xff1a;天猫、京东商城、拼多多、有赞、快递鸟接口。 02 业务场景 企业在第三方电商平台开店&#xff0c;需要对电商平台上商品价格、库存进行更新&#xff0c;并将电商订单下载到ERP系统&#xff0c;ERP进行作业后&#xff0c;将物流信息上传到电…

【MATLAB源码-第265期】基于simulink的DQPSK调制解调系统仿真,未直接调用模块并且手动实现,输出各节点波形图。

操作环境&#xff1a; MATLAB 2013a / 2013b 1、算法描述 差分正交相移键控&#xff08;DQPSK&#xff09;调制解调系统是一种非常成熟的数字通信技术&#xff0c;主要用于传输数据中的相位变化&#xff0c;而非绝对相位。这一特性使得它对信号中的相位抖动和其他干扰具有更…

再次进阶 舞台王者 第八季完美童模全球赛见证官【孔翊橙】赛场+秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——孔翊橙迎来了她舞台生涯的璀璨时刻。见证官——孔翊橙&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&#xff0c;作为开…

双副本与双活:TDengine 为企业打造的高效数据管理利器

在现代数据管理中&#xff0c;企业对于可靠性、可用性和成本的平衡有着多样化的需求。为此&#xff0c;TDengine 在 3.3.0.0 版本中推出了两种不同的企业级解决方案&#xff1a;双活方案和基于仲裁者的双副本方案&#xff0c;以满足不同应用场景下的特殊需求。本文将详细探讨这…

看看智慧门诊银医通自助服务方案,如何化解医院患者跑难题

“看病三分钟&#xff0c;排队三小时”&#xff0c;这是许多患者在就医过程中的无奈吐槽。挂号队伍长如龙&#xff0c;看病流程繁琐复杂&#xff0c;缴费窗口人满为患&#xff0c;检查报告等待时间漫长…… 这些就医痛点&#xff0c;不仅让患者身心疲惫&#xff0c;也给医院的管…

Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

wifi MSDU MPDU BA

MSDU (Mac service data unit) mac 服务层 数据单元&#xff0c; 也就是包含了 mac 层头和 FCS 的 802.11 包。 MPDU&#xff08;Mac protocol data unit&#xff09;mac 协议层数据单元&#xff0c; 这个包只是原始的802.11 数据包 在新的wifi 协议中有两种聚合方式 A-MSDU…

数仓建设:为什么我们的数据容易被业务方质疑?

目录 0 问题背景 1 问题产生的原因 2 问题解决方案 3 小结 数字化建设通关指南专栏原价99&#xff0c;现在活动价39.9&#xff0c;按照阶梯式增长&#xff0c;直到恢复原价 0 问题背景 “ 在数字化建设进程中&#xff0c;无论是处于数据产品的你&#xff0c;或是数据开发的…

ModbusTCP/RTU转Ethernet/IP(CIP)-Modbus设备与罗克韦尔AB的PLC之间通讯

IGT-DSER智能网关模块支持西门子、三菱、欧姆龙、罗克韦尔AB等各种品牌的PLC之间通讯&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪表、变频器等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。无需PLC内编程开发&#xff0c;只要在IGT-DSER智…

Python 数学建模——Vikor 多标准决策方法

文章目录 前言原理步骤代码实例 前言 Vikor 归根到底其实属于一种综合评价方法。说到综合评价方法&#xff0c;TOPSIS&#xff08;结合熵权法使用&#xff09;、灰色关联度分析、秩和比法等方法你应该耳熟能详。Vikor 未必比这些方法更出色&#xff0c;但是可以拓展我们的视野。…

从GreaterWMS学习仓库管理系统

前言 客户并不知道&#xff08;确切地&#xff09;他们需要什么&#xff1f; 需要通过需求分析工具和技术&#xff0c;利用宽进严出的需求池&#xff0c;需求验证使用原型测试&#xff0c;场景分析&#xff0c;专家评审&#xff0c;交叉检查等手段&#xff0c;经过充分验证的需…

牛耕分解+形态学分割 全覆盖路径规划(二)Part1. 分割

书接上文&#xff1a;牛耕分解形态学分割 全覆盖路径规划&#xff08;一&#xff09; 前置文章1&#xff1a;房屋区域分割算法 Morphological Segmentation 前置文章2&#xff1a;牛耕覆盖算法 Boustrophedon Coverage Path Planning 项目地址&#xff1a;ipa320 / ipa_cove…

基于Kubernetes部署Spark:spark on kubernetes

什么是spark&#xff1f; spark是一种基于内存的快速、通用、可扩展的的数据分析计算引擎。 Hadoop、Hive、Spark是什么关系&#xff1f; 大数据技术生态中&#xff0c;Hadoop、Hive、Spark是什么关系&#xff1f;| 通俗易懂科普向_哔哩哔哩_bilibili Hadoop 与 HDFS (Hado…

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

腾讯联合多所高校出品!AI游戏生成模型 GameGen-O 轻松生成高质量游戏元素

最近&#xff0c;香港和中国的几所大学与腾讯联合研发了一个名为 GameGen-O 的 AI 模型&#xff0c;专门用于创建开放世界视频游戏的模拟。 GameGen-O 的功能不仅仅限于生成高质量的游戏内容&#xff0c;它还模拟了多种游戏引擎的特性&#xff0c;能够创造出丰富多样的游戏元素…