Linux编辑器gcc/g++使用及Vim的配置

news2024/12/25 0:29:19

🌈个人主页:Yui_
🌈Linux专栏:Linux
🌈C语言笔记专栏:C语言笔记
🌈数据结构专栏:数据结构
🌈C++专栏:C++

文章目录

  • 1.简单的vim配置
    • 1.1 配置文件的位置
    • 1.2 常用配置选项
    • 1.3 懒人一键到位的配置
  • 2. Linux编辑器gcc/g++使用
    • 2.1 背景知识
    • 2.2 关于编译器的一些知识
    • 2.3 gcc如何完成工作
    • 2.4 函数库

1.简单的vim配置

1.1 配置文件的位置

在目录/etc/下面,有个vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
而在每个用户的主目录下,都可以自己建立私有的额配置文件,命名为:.vimrc。例如,在/root目录下,通常已经存在一个.vimrc文件,如果不存在,自己创建一个就可以了。
注意:配置vim不要再系统公共的vimrc进行配置,这样就会给每个用户都配置了,Linux毕竟是一个多用户的操作系统,每个人的配置喜好都是不同的,所以呢,用户如果需要配置vim就在用户的当前目录进行配置。按 cd~进入当前用户的主工作目录。
打开当前目录下的.vimrc,执行vim .vimrc.

1.2 常用配置选项

  • 设置语法高亮:syntax on
  • 显示行号:set nu
  • 设置缩进的空格数位4:set shiftwidth=4
    这是没有配置过的vim:
    没有配置过的vim

配置后:
配置后的vim

尽管前后大差距不大,但如果你配置了几十上百条呢?vim就会显得很不同啦。

1.3 懒人一键到位的配置

快速配置vim

2. Linux编辑器gcc/g++使用

2.1 背景知识

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 链接(生成可执行文件或库文件)

2.2 关于编译器的一些知识

大家有没有想过明明软件的运行需要编译,而编译器也是软件那么编译器也需要编译,所以是先有的语言还是先有的编译器?
先给出答案吧,当然是先有的语言。
我们都知道最开始控制计算机是需要使用二进制的,利用打孔纸袋来控制计算机。就是这样的纸袋。
打孔纸袋

然后因为二进制来控制计算机实在是太麻烦了,科学家就发明出来了汇编语言,汇编语言虽然是低级语言,但也需要编译器让它转化位二进制。那么汇编语言的编译器是用什么写的呢?没错是用二进制写的,在最开始会利用二进制写的编译器编译汇编语言,在编译成功后,我们就可以用汇编语言写一个编译器,然后在二进制编译器编译成功后就改用汇编写到编译器来编译汇编语言。
以此类推像C/C++编译器也是如此。
在这里插入图片描述

编译器的自举
C->低级语言写一个C编译器 ->能形成软件了
C编译器->C ->低级语言写一个C编译器 ->形成了用C写的编译器了
C:>用C写的编译器了->编译C语言
C编译器优化v2->用C写的编译器v1->v2编译器

2.3 gcc如何完成工作

语法

gcc [选项]要编译的文件[选项][目标文件]

预处理:进行宏替换

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
  • 预处理指令以#号开头的代码行
  • 实例:从出现开始进行程序的翻译过程,当预处理做完后就停下来
gcc -E test.c -o test.i

预处理

预处理

  • 选项-E,该选项的作用是让gcc在预处理结束后停止编译过程
  • 选项-o是指目标文件,.i文件为已经预处理过的C原始程序。
    编译:生成汇编
  • 在这个阶段中,gcc首先检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。
  • 用户可以使用-S选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码,
    实例:从现在开始进行程序的翻译,当编译工作做完就停下来
gcc -S test.i -o test.s

生成汇编

汇编:生成机器可识别代码

  • 汇编阶段是把编译阶段生成的.s文件转化为目标文件
  • 读者在此可使用-c就可以看到汇编代码转化为.o的二进制目标代码了
    实例:从现在开始进行程序的翻译,当汇编工作做完就停下来
gcc -c test.s -o test.o

二进制

因为vim是文本编辑器,查看二进制文件就会出现一堆乱码。

链接:生成可执行文件或库文件

  • 在汇编成功后,就进入了链接阶段
    实例:
gcc test.o -o mybin

链接

2.4 函数库

我们的C程序中,并没有定义printf的函数实现,且预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现printf函数的呢?
回答
系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径/usr.lib下进行查找,也就是链接到libc.so.6库函数中去了,这样就能实现函数printf了,而这也就是链接的作用。
函数库一般分为静态库个动态库两种

  • 静态库是指链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但是在运行时也就不需要库文件了。其后缀一般为.a
  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统开销,动态库一般后缀名.so如前面所说的,libc.so.6就是的动态库。gcc在编译时默认使用动态库。完成了链接之后,gcc就可以生成可执行文件,如下:
gcc test.o -o test
  • gcc默认生成的二进制程序,是动态链接的,这点可以通过file指令验证

gcc选项

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

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

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

相关文章

20 Tkinter Spinbox 组件

Tkinter Spinbox 组件使用指南 Tkinter 的 Spinbox 组件是一个带有上下箭头的输入框,允许用户通过点击箭头来增加或减少数值,或者从下拉列表中选择一个值。它通常用于需要限制用户输入范围的场景。以下是对 Spinbox 组件的详细说明和一个使用案例。 Sp…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口&#xff0c…

前端面试题 webpack的工作流程

一、流程图 二、重要概念 1.entry入口: Webpack 从配置的入口点开始,分析应用程序的依赖关系 2.output出口: 定义了打包后的文件如何输出,包括文件名和输出路径。 3.loader加载器: Webpack 本身只能处理 JavaScr…

2024 Python3.10 系统入门+进阶(六):random模块常用方法以及元组常用操作详解

目录 一、random模块1.1 random模块快用导航1.2 choice()方法---从非空序列中返回一个随机元素1.3 choices()方法---返回序列的随机元素1.4 randint()方法---获取指定范围的随机整数1.5 random()方法---获取0.0~1.0范围内随机浮点数1.6 randrange()方法---获取指定范围的随机整…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示,有2个矢量图斑,一个是耕地地块,另一个是范围图斑,如果我们需要把此工程的所有数据以及引用地图一起分享给别人,就可以使用【打包工程】这个工具。 如上所示,在【地理处理】下输入【打包工程】&am…

Excel的使用总结1

目录 1、汇总公式:TEXTJOIN 2、excel中选择某个区域的方法 3、excel中如何在复制的时候,不将公式一起复制过去 4、想要自动填充某个区域的值的方法 1、汇总公式:TEXTJOIN TEXTJOIN 函数 - Microsoft 支持 例:TEXTJOIN("…

Java数组07:稀疏数组

本节内容视频链接: https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 稀疏数组(‌sparse …

[SWPUCTF 2023 秋季新生赛]UnS3rialize

[SWPUCTF 2023 秋季新生赛]UnS3rialize 点开之后得到一串php代码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class NSS {public $cmd;function __invoke(){echo "Congratulations!!!You have learned to construct a POP chain<br/>&q…

CDGA|数据治理为企业赋能价值的几种形式

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程&#xff0c;正逐步成为企业转型升级、提升竞争力的核心驱动力。数据治理不仅关乎技术层面的优化&#xff0c;更是企业战略实…

【C++ Primer Plus习题】2.5

问题: 解答: #include <iostream> using namespace std;#define CEL_TO_FAH(c) 1.8*c32.0float celToFah(float value) {float fahrenheit CEL_TO_FAH(value);return fahrenheit; }int main() {float celsius 0;cout << "请输入一个摄氏温度的值:";ci…

ARM——驱动——内核编译

一、内核的介绍 Linux内核是Linux操作系统的核心内容&#xff0c;它负责管理系统的硬件资源&#xff0c;并为上层的应用程序提供接口。&#xff08;在上文都有所介绍&#xff09; 功能&#xff1a; 进程管理&#xff1a;内核负责创建、调度、同步和终止进程。它还管理进程间的…

linux应用编程--网络编程(socket编程基础)

介绍&#xff1a;套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c; 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#…

Python(PyTorch)多语言图像感知质量指标算法

&#x1f3af;要点 &#x1f3af;算法实现&#xff1a;&#x1f58a;PyTorch单尺度和多尺度质量指标算法 | &#x1f58a;C单尺度质量指标算法 | &#x1f58a;Rust多尺度质量指标算法 | &#x1f58a;LabVIEW单尺度质量指标算法 | &#x1f58a;MATLAB单尺度质量指标算法 | &…

TCP+UDP通信

一、UDP协议 1.1、recvfrom() 参数说明 int sockfd, //socket 的fd void *buf, // 保存数据的一块空间的地址 size_t len, //这块空间的大小 int flags,// 0 默认的接收方式 -----阻塞方式 默认行为是阻塞 MSG_DONTWAIT 不阻塞方式&#xff0c;用他的话代表读的时候是非…

宠物掉毛、有异味怎么办?怎么选择宠物空气净化器?

每当我和朋友提起我家养猫养狗之后&#xff0c;不少朋友总会带着好奇与担忧的表情&#xff0c;半开玩笑地说&#xff1a;“你家里岂不是充满了‘特别’的味道&#xff1f;”这也不怪她们会有这种印象&#xff0c;因为大部分养宠家庭可能都会遇到浮毛满天飞的情况&#xff0c;但…

深入探讨SD NAND的SD模式与SPI模式初始化

在嵌入式系统和存储解决方案中&#xff0c;SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式&#xff0c;这两种模式在功能和实现上各有优劣。在本文中&#xff0c;我们将深入探讨这两种模式的初始化过程&#xff0c;并比较它们在不同应用场景下的优劣&…

什么是上网行为管理呢?【上网行为管理系统功能介绍 】

小编想跟大家介绍上网行为管理系统的功能&#xff0c;可以提高工作效率和安全性。如果你也和部分管理者一样&#xff0c;经常为网络管理头疼&#xff0c;不妨看看小编解析的上网行为管理功能&#xff0c;会让眼前一亮哦&#xff01;上网行管控 应用场景&#xff1a;过滤非法网站…

Tomcat类加载机制详解

1.Tomcat类加载机制详解 1.1 JVM类加载器 Java中有 3 个类加载器&#xff0c;另外你也可以自定义类加载器 引导&#xff08;启动&#xff09;类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如rt.jar、charsets.jar等扩展类加载器&am…

流量掘金付费进群源码,最新无人直播变现玩法

外面1800流量掘金付费进群搭建 最新无人直播变现玩法 流量掘金付费进群网站源码 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89662670 更多资源下载&#xff1a;关注我。

消化学科的领军人物陈烨教授在会议上作了《幽门螺杆菌的规范检测与质控》的专题报告

由广东省药学会主办的“第十九届消化疾病诊疗会暨胃肠疾病药物临床研究交流会”于2024年8月8日-9日在广东省深圳市召开。陈烨教授&#xff0c;作为消化学科的领军人物、中华医学会消化病学分会的常务委员&#xff0c;以及全国幽门螺杆菌学组的组长&#xff0c;在会议上作了《幽…