从入门到精通:解锁Linux开发工具和编译器的力量

news2024/12/28 20:24:44

在这里插入图片描述

目录

  • 一.编辑器vim的使用
    • 1.vim的基本概念
    • 2.vim的使用
    • 二.编译器gcc/g++
      • 1.编译器的使用
      • 2.编译器是如何完成的?
      • 3.动态库与静态库

一.编辑器vim的使用

1.vim的基本概念

vim是一个方便编程的功能特别丰富的文本编辑器,凭借他简洁的三种模式以及丰富的快捷键操作,可使得熟练使用的人做到不使用鼠标完成代码的编写,所以深受人们喜爱。

2.vim的使用

vim是一个多模式的编辑器——命令行模式、插入模式、底行模式。三种模式的转换及关系如下:
在这里插入图片描述
下面在xshell下演示下,我们先创建个文件并用vim打开:
在这里插入图片描述

在这里插入图片描述
现在我们就进入了vim的命令模式,接着输入i就直接进入的插入模式,现在我们就能编写代码了。我们写入一段简单的代码进行功能演示:
在这里插入图片描述
接着我们输入Esc退出插入模式,进入命令模式在输入进入底行模式后输入wq将文件保存并且退出vim编辑器。
在这里插入图片描述
我们用cat显示出我们刚刚编写的代码内容:
在这里插入图片描述
显然我们成功向文件写入了一段代码并保存了下来。
在命令模式下还有诸多快捷的操作如下:

gg:将光标定位到开头
G:将光标定位到结尾
n+G:将光标定位到第n行
shift+$(4):将光标定位到当前行结尾
shift+~:将光标定位到行开头
(n)yy:可复制当前光标所在起n行
(n)dd:可删除当前光标所在起n行
(n)p:粘贴复制的内容(重复n次)到当前光标的下一行
u:可撤销上一步
ctrl+r:撤销之前的撤销
shirt+~: 大小写转换
(n)r: 对光标字符+之后的所有字符进行批量化替换
shirt+R : 换模式,对内容进行整体瑟换 --> 第四种模式
(n)x: 对光标字符之后的字符进行删除

在vim中我们想要进行多文件编辑时,可以在底行输入vs并命名即可。使用ctrl+ww可以切换到不同的窗口进行开发。
在这里插入图片描述

二.编译器gcc/g++

1.编译器的使用

我们可以使用编译器gcc/g++来编译上面编写的代码:
在这里插入图片描述
gcc和g++的区别即是gcc只可编译C语言无法编译c++而g++编译器都可以编译。在接下来的学习中可得知gcc无法编译c++是缺少关于c++的头文件、库文件所导致的。

2.编译器是如何完成的?

在之前的学习中,我们知道编译器在生成可执行程序前经历过以下几个阶段:预处理、编译、汇编、链接
我们可以使用选择不同的编译器选项,演示编译的不同阶段:
在这里插入图片描述
-E可以让编译器进行到预处理工作完成后停止对程序的翻译,这时候我们用vim观察.i文件的内容。
在这里插入图片描述
原本短短的几行代码,经过预处理竟然变成了近乎一千行的代码。我们知道预处理阶段会进行:去注释、头文件的展开、条件编译和宏替换,显然是头文件的展开造成了代码体积的增大
接着对预处理后的文件进行编译使得生成汇编文件,接着就能我们常在底层看到的汇编语言。
在这里插入图片描述

在这里插入图片描述
接着对编译后的文件进行汇编操作生成机器码(二进制码)。
在这里插入图片描述
我们用vim打开机器码也是无法识别的乱码。
在这里插入图片描述
接着进行链接生成可执行程序
在这里插入图片描述
到这里我们就不免想知道链接的过程是如何实现的呢?
链接的过程就是由库来提供方法头文件提供方法的声明+库文件提供方法的实现再加上你的代码即可实现一定的功能。

3.动态库与静态库

而库又分为动态库静态库。它们各有各自的特点:

动态库:
动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序可能导致很多程序都无法进行正常运行!
静态库:
在使用 静态库进行静态链接的时候,会将自己的方法拷贝到目标程序中,该程序以后不用再依赖静态库,直接只用程序中拷贝好的方法即可。

接下来在Linux下演示动态链接与静态链接的区别:

ldd作用:
用于打印程序或者库文件所依赖的共享库列表。

在这里插入图片描述

如上演示我们可得:
在Linux中,编译形成可执行程序,默认采用的就是动态链接-- 提供动态库
在Linux中,如果要按照静态链接的方式,进行形成可执行程序,需要添加-static选项 – 提供静态库还需注意的是gcc/g++默认优先动态链接,如果加上-static可以改变此次的优先级进行静态链接。但是linux默认只会安装动态库,在没有静态库的情况下是无法修改优先级的。

动态库与静态库的比较:
动态库因为是共享库,有效的节省资源(磁盘空间,内存空间,网络空间等)[优] 动态库一旦缺失,导致各个程序都无法运行[缺]
静态库,不依赖库,程序可以独立运行[优点],体积大,比较消耗资源[缺]

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

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

相关文章

Arduino IDE的安装

https://www.arduino.cc/en/software/

AI 绘画 - 建筑绘图辅助设计之 Controlnet

前情提要 2023-06-17 周六 杭州 阴 小记: 早上还是可以听到淅淅沥沥的雨声,或许梅雨季快要来了,潮湿的感觉说不上多讨厌,可是也没有那么喜欢;最近在追动画《飞出个未来》,我是把这个动画当作哲学课来看的&#xff0c…

linux模块的变量与函数导出与引用

在Linux内核中,不同模块之间可以通过导出和引用函数或变量的方式来进行交互。具体而言,Linux内核提供了一些导出和引用符号的机制,这些机制可以使得不同模块之间能够访问并使用彼此的函数或变量。 导出符号的方式一般有两种: 使…

【动态规划算法练习】day12

文章目录 一、978. 最长湍流子数组1.题目简介2.解题思路3.代码4.运行结果 二、413. 等差数列划分1.题目简介2.解题思路3.代码4.运行结果 三、1567. 乘积为正数的最长子数组长度1.题目简介2.解题思路3.代码4.运行结果 总结 一、978. 最长湍流子数组 1.题目简介 978. 最长湍流子…

python输出颜色(终端控制台)

python输出颜色(终端控制台) 1、终端ANSI2、Python自带的函数库ctypes3、colorama 1、终端ANSI 更多查看 ECHOX.bat输出文本背景和文字颜色 其中特殊字符print("Black :[30m f0 [0m Black :[40m b0 [0m")即是print("Black :\033[30m f0 …

3.设计模式之后七种模式桥接装饰者组合外观享元代理模板

1.桥接模式 bridge(抽象类的实现的子类,通过聚合间接调用接口方法 就是桥) 实现和抽象分开,使他可以独立改变结构型设计模式基于类的最小设计原则(增加功能,增加最少个数的类),通过封装 聚合和继承让不同类实现不同职责 图 23桥接模式原理图 图 26桥接模式传统解决手机操作问题…

(六)Spring源码解析:Spring AOP源码解析

〇、AOP概念 Aspect:切面 给业务方法增加到功能,切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。 Pointcut:切入点 切入点指声明的…

Nerf-Wild神经辐射场论文学习笔记 Neural Radiance Fields for Unconstrained Photo Collections

前言: 本文为记录自己在Nerf学习道路的一些笔记,包括对论文以及其代码的思考内容。公众号: AI知识物语 B站讲解:出门吃三碗饭 本篇文章主要针对其数学公式来学习其内容,欢迎批评指正!!&#x…

10-C++学习笔记-字符串

📚 前言 字符串是在编程中广泛使用的数据类型,用于表示一系列字符。在C中,我们可以使用C风格字符串和string类来处理字符串操作。本篇学习笔记将详细介绍字符串的相关知识。 📖 1 C风格字符串 ✨ C风格字符串初始化 C风格字符…

什么是EMC存储 Clarrion存储的cache dirty或者cache lost(CACD)?

CACD是Cant assign, Cache Dirty的缩写,DELL EMC的专业术语。 在开始之前,先介绍下cache dirty的概念,朴素的语言就是有了脏数据,脏数据当然就是不能使用的数据了。为什么数据会脏呢?先从存储的基本概念聊起来。 为了加…

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

目前,随着各类 Layer2 空投不断内卷,越来越多的用户疲于参与其中(参与交互也很有可能难以获得空投资格)。Nautilus Chain 作为目前模块化 Layer3 架构链,在初期就明确了空投计划,即所有上线的应用都将会拿出…

各类农作物分布遥感监测数据大全

最近收集整理了大量的农作物分布的遥感监测数据,废话不多说,分享给大家,后面会持续更新!! 数据查看地址: https://www.dilitanxianjia.com/%e9%81%a5%e6%84%9f%e8%a7%a3%e8%af%91%e5%90%8e%e6%88%90%e6%9…

LeetCode 0002. 两数相加

【LetMeFly】2.两数相加 力扣题目链接:https://leetcode.cn/problems/add-two-numbers/ 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff…

2016年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 💕兴趣爱好:b站天天刷&…

华为OD机试真题 Java 实现【开心消消乐】【2023 B卷 100分】

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的1进行反…

maven高级开发

分模块设计 例如 如果需要用到其他的模块,直接导入模块坐标就可以了 分模块开发,需建立的模块,选择maven模型 分模块设计需要先针对模块功能进行设计,再进行编码。 继承与聚合 继承:描述的是两个工程间的关系&…

UE4/5通过插件,用GeneratedDynamicMeshActor编辑静态网格到content中

目录 制作 直接复制下面代码到蓝图中粘贴即可: 效果1【用了第一个函数】: 效果2【用了第二个函数】: 制作 首先我们要打开插件: 然后继承GeneratedDynamicMeshActor进行创建: 我们制作一个函数,这个函数将…

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

目录 💌 写在前面 🖥️ 软件介绍 🖥️ 使用方式 1. Draw.io 的核心设计元素 1.1 绘图区 1.2 快速开始 2. Draw.io 的基本操作 2.1 移动、多选、复制与删除 2.2 创建链接 2.3 图形替换与旋转 3. 使用 Draw.io 绘制简单流程图 3.1 基本…

ChatGPT Plugins内幕、源码及案例实战(三)

ChatGPT Plugins内幕、源码及案例实战(三) ChatGPT Plugins内幕、源码及案例实战 6.4 ChatGPT Retrieval Plugin全流程内幕解析 以ChatGPT检索插件为例,我们讲解一下它整个的流程,让大家有一个比较明确、清晰的统一认知:  数据存储:设立的前提是你有文档,会有一些文…

大学教材征订管理系统数据库设计

摘 要 随着计算机及Internet迅速的发展,越来越多的行业实现了管理的信息化和自动化,教育行业也不例外。但在很多高校中,教材征订作为学校教学工作中很重要的一个环节还没完全实现信息化管理。因此本系统针对高校教材征订管理过程中人工管理存在的困难&a…