Linux环境开发工具的使用.

news/2024/4/24 1:59:41/文章来源:https://blog.csdn.net/zhu_pi_xx/article/details/126979030

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸
在这里插入图片描述

文章目录

  • 一、Linux编辑器-vim的使用
    • 1.编辑和退出
    • 2.vim的多种模式
      • a.命令模式
      • b.底行模式
      • c.替换模式
  • 二、Linux编译器-gcc/g++的使用
    • 1.gcc
    • 2.g++
  • 三、动静态库&&动静态链接
    • 1.动静态库
    • 2.动静态链接
    • 3.实操动静态链接
  • 四、Linux项目自动化构建工具-make、Makefile

一、Linux编辑器-vim的使用

1.编辑和退出

vim   //即可打开vim
vim XXX  //即可对某个文件进行编辑
:  //也就是shift + ;,就可以把光标移到左下角(底行模式)
输入wq   //w叫做写入(保存),q叫做退出
输入!wq   //在无法写入或退出的情况下,这表示强制写入和强制退出

2.vim的多种模式

vim是一款多模式的编辑器,vim刚打开的时候是命令模式(默认打开的模式),想要写代码需要切换模式

i/F12  //就可以切换到编辑模式(也叫作插入模式)
ESC(exit screen)    //回到命令模式

a.命令模式

命令模式NORMAL

yy    //复制当前所在行
nyy   //从当前行开始,复制n行dd    //剪切
ndd   //从当前行开始,剪切n行p     //粘贴
u     //撤销
Ctrl r//撤销撤销
文件只要不退出,即便保存了也可以u和Ctrl r,但是一旦退出就不行了
G     //光标定位到文件结尾
gg    //光标定位到文件开始
n G   //光标定位到任意行
$/shift 4   //定位到文本行末尾
^/shift 6   //定位到文本行开头
h    //向左移动  ↑
j    //向下移动  ↓
k    //向上移动  ↑
l    //向右移动  →
r 某字母   //当前位置的字符替换成某个字符
nr 某字母  //当前位置开始的n个替换成某个字符
x  //删除当前自符
shift ~  //对单个字母进行大小写替换(自动替换,无需输入)
shift r  //转换成替换模式,无视当前内容进行覆盖替换,如果输错可以Backspace回退

b.底行模式

底行模式COMMAND

set nu   //设置行号
set nonu //取消设置行号
vs 文件名  //vim分屏操作,光标在哪个分屏,底行就是谁的
Ctrl ww   //切换分屏,注意,这是底行模式的命令
!        //不退出vim执行命令
!ls -al
!man ls
!gcc -o test test.c等等

在这里插入图片描述

c.替换模式

shift r 切换到替换模式
F12/insert  即可切换到替换模式,也可切换到插入/编辑模式

二、Linux编译器-gcc/g++的使用

gcc是专门用来编译C语言的编译器
g++是用来编译C/C++的编译器(因为C++兼容C)

gcc -v
g++ -v  //查看版本

gcc是默认有的,如果g++没有的话sudo yum install -y gcc-c++

1.gcc

编译链接其实有四个过程:预编译、编译、汇编、链接

预编译: 主要进行
1.去注释2.宏替换3.头文件展开4.条件编译
总的来说也就是去注释处理预处理指令

gcc -E test.c -o test.i   
-E代表在预处理结束后停止,生成的是test.i文件
-o是我要指定一个新的名字
.i是Linux预处理完后生成的文件的文件后缀

编译:主要是将C语言替换成汇编语言
其中还有语义分析,语法分析,词法分析,词义分析 ,符号汇总等等

gcc -S test.c -o test.s
-S表示在编译完后停下,生成的是test.s文件
-o表示指定名字
.s是Linux编译完后生成的文件的文件后缀

汇编: 主要是将汇编语言替换成二进制语言和形成符号表
生成的是可重定向二进制目标文件

gcc -c test.c -o test.o
-c表示在汇编完后停下,生成的是.o文件
-o表示重新制定一个名字
.o是Linux汇编完后生成的文件的文件后缀

链接: 多个可执行文件通过连接器生成可执行文件
并且包括形成段表和符号表的重定位

gcc test.o -o test
gcc test.c -o test
//直接gcc就是编译链接

2.g++

过程类似,参考gcc自己琢磨

三、动静态库&&动静态链接

1.动静态库

ldd XXX   //列出某文件动态库依赖关系
file XXX  //Linux下并不是以后缀名来判断某个文件的类型的,因此我们可以用file来查看某个文件的类型

在这里插入图片描述
在这里插入图片描述

一般链接的过程有两种方式
一种是动态链接,需要动态库
一种是静态链接,需要静态库

我们用ls /lib64就可以看到大量的动静态库
比如调用printf函数,就是由这些动静态库提供的
通过头文件找到方法的声明,再通过库找到方法的实现,再把我的代码和库里面的代码以某种方式联系起来,才形成了一个可执行程序

Linux:
.so (动态库)
.a (静态库)
Windows:
.dll (动态库)
.lib (静态库)

2.动静态链接

**动态链接:**将库中需要的实现方法的地址,填入我的可执行程序中,建立关联
好处:节省资源
坏处:非常依赖库文件,如果不存在或缺失,程序无法运行

**静态链接:**将库中方法的实现,拷贝到可执行程序中
好处:不再依赖库
坏处:占用资源

3.实操动静态链接

gcc、g++默认形成的可执行程序是动态链接的
在这里插入图片描述

gcc test.c -o test -static
-static  表明使用静态链接的方法形成可执行程序

云上服务默认只会添加动态库,需要自己安装

sudo yum install libstdc++-static
sudo yum install glibc-static

在这里插入图片描述
由此可见,静态链接是非常占用资源的,而动态链接就占用的比较少

四、Linux项目自动化构建工具-make、Makefile

make是命令,Makefile是文件
make和makefile存在的意义就是自动化的帮我们构建项目
makefile文件的内容就是
a.依赖关系
b.依赖方法

在这里插入图片描述
其中,test.c是依赖关系,gcc test.c -o mytest是依赖方法
.PHNOY:clean是伪目标

.PHONY是一个关键字,伪目标的特点是总是被执行(多次被执行)
在这里插入图片描述

那么编译器是如何得知我的test是最新的呢?
之前的文章里我们就讲到了,ACM时间中的最近修改时间
编译器通过对生成的可执行程序的时间和源程序的时间作对比,如果可执行程序是最晚的,那么就是最新的
在这里插入图片描述
A:access最近访问时间,修改也算是访问,并不是打开这个文件的时间
C: change最近修改的时间(属性的改变)
M: modify最近修改的时间(内容的改变)
文件=内容+属性
访问是一件高频的事件,如果说访问一次就修改一次,大大降低了效率,所以,Linux是累积一定时才去修改访问时间

多个源文件形成可执行程序

gcc -o mytest main.c test.c

Makefile文件

mytest:main.o test.o          //(依赖关系列表)gcc -o mytest main.o test .o//当自顶向下扫描找不到中和两个文件时,继续向下扫描
main.o:main.cgcc -c main.c -o main.o
test.o:test.cgcc -c test.c -o test.o.PHONY:clean
clean:rm -rf *.o mytest

感谢大家的支持,我会持续更新!!!
在这里插入图片描述

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

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

相关文章

【面试题】我们知道ArrayList是线程不安全,请编写一个不安全的案例并给出解决方案。

(一)、不安全的案例(待补充): (二)解决方案一:使用CopyOnWriteArrayList代替ArrayList (1)如下面三张图ArrayList底层其实是一个数组 (2)CopyOnWriteArrayList底层数组是用volatil…

计算机毕业设计开题报告基于ssm maven健身房俱乐部管理系统

🍅文末获取联系🍅 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 基于ssm的健身房管理系统-计算机毕设java毕业设计项目源码-可定制-IT实战课堂_哔哩哔哩_bilibili项目资料网址: http://www.itszkt.com毕业设计课程设计项目…

item_get商品详情代码展示

1、API 是什么? API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理…

Aip接口自动化测试框架pytest+allure+request+jsonpath+excle

Aip接口自动化测试框架pytestallurerequestjsonpathexcle 介绍 Aip接口自动化测试pythonpytestallurerequestjsonpathexcle,一个支持仅编辑Excle就可实现的接口自动化测试框架。 1.编辑Excle做接口数据驱动的数据源 2.接口上下游数据依赖处理 3.Excel执行函数获取…

对集合、复杂度以及泛型的认识

文章目录 一、集合框架是什么?二、复杂度 1.时间复杂度2.空间复杂度三、泛型一、集合框架是什么? Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 …

linux使用nginx-gridfs实现文件服务

一:nginx第三方模块用什么命令,--addmongodb 二:怎么样装mongodb 三:怎么上传一个图片 四:怎么样去访问这个图片 三方模块;它不是nginx的,就是在源码包编译nginx的时候,把第三方…

IJCAI 2022 | 使用陈述句进行视觉问答的Prompt Tuning

©PaperWeekly 原创 作者 | 武祥宇单位 | 南京理工大学博士生研究方向 | 多模态学习论文标题:Declaration-based Prompt Tuning for Visual Question Answering收录会议:IJCAI 2022论文链接:https://arxiv.org/abs/2205.02456代码链接&a…

python基于django的高校教师科研成果管理系统

长期以来,院校的科研水平和科研规模一直反映着我国科研技术水平技术含量,随着现代科技的日益发展,各个院校的科研活动和科研能力已成为反映高校综合实力重要指标,而随着高校专业类别的增加,教师科研领域范围扩大&#…

GreenPlum列存解密

GreenPlum支持列式存储。叫做AOCO表。那么AOCO列存是如何管理列存文件?如何实现MVCC?是否支持索引,若支持如何实现的呢?下面我们介绍下AOCO的实现机制。1、存储结构如上图所示,列存每一列单独存储一个文件。上面一个表…

文件管理命令和find命令

文件管理命令和find命令 stat命令 查看文件状态 每个文件有三个时间戳: access time访问时间,atime,读取文件内容modify time修性时间, mtime,改变文件内容change time改变时间,ctime,元数据发生改变场景是:上传了WebShell,避…

MySQL数据误删恢复操作

目录记录一次不小心删除生产数据偷偷恢复解决方案 模拟数据删除 记录下操作时间,2022-09-21下午5点左右 通过show variables like %datadir%查看binlog存放目录目录 通过show master status;查看当前binlog的记录文件 查看mysqlbinlog工具目录,需要通过此…

ANYCUBIC Photon Mono 4K光固化打印机快速上手(多次试错的经验积累)

变更记录 记录每次修订的内容,方便追溯。 版本号作者修订内容发布日期1.1Zeeland优化打印机的最佳模式内容2022年9月21日 23:41:581.0Zeeland完善基本文档2022年2月14日 19:33:52 1. 简介 笔者前期使用ANYCUBIC Photon Mono 4K光固化打印机失败了很多次&#xff0c…

Vue3——压缩字体font-spider,完美解决字体压缩后会出现字体消失现象

Vue项目打包字体完整版教程 如果打包的时候字体太大,可以选择压缩字体进行处理 打包前: 打包后: 可以看到,区别还是很明显的,下面是使用方法 这里可以使用字蛛font-spider来进行压缩 字蛛font-spider npm install font-spide…

C 语言避坑指南

文章目录👉引言💎C 避坑指南一、基础|基本常识类1 运算符类型2 占位符|格式化问题3 输入输出问题二、错题 | 程序语句类三、进阶 | 指针与函数四、进阶 | 结构体及宏定义👉引言💎 学习的最大理由是想摆脱平庸,早一天就…

linux 中 date +%s 获取1970年以来的秒数

001、(base) [root@PC1 home]# date +%s 1663810406 (base) [root@PC1 home]# date +%s 1663810410 date +%s //从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)参考:https://zhidao.baidu.com/question/490735500497375812.html

EasyCVR接入宇视设备后通道显示的是目录,是什么原因?

EasyCVR平台基于云边端一体化架构,充分发挥视频接入、汇聚与管理、分发、智能分析、数据共享等能力,不断在多样化场景中落地应用,不仅涵盖传统行业的安防视频监控,还涉及到景区旅游、校园教育、社区、楼宇、智慧农业等领域的应用。感兴趣的用户可以前往演示平台进行体验或部…

Docker安装Jenkins

Docker安装Jenkins 准备工作 下载Jenkins镜像 docker pull jenkins/jenkins开始安装 创建需要挂载的本地文件夹 mkdir -p 路径/jenkens chmod 777 路径/jenkens创建并启动Container docker run -d -p 8080:8080 --name=jenkins -v 路径/jenkens/:/var/jenkins_home jenkins/jen…

vue 中利用js完成等比例缩放图片和点位跟着移动

需要等比例缩放的内容 html <div class="boxImg" ref="cont" style="position: absolute; top: 0; left: 0"><!-- 这里放上需要等比例缩放的内容 --> </div> 在vue中 methods 中写 methods: {updateScaleRatio(ImgObj, ma…

linux - 搭建部署ftp服务器

ftp 服务&#xff1a; 实现ftp功能的一个服务&#xff0c;安装vsftpd软件搭建一台ftp服务器 ftp协议&#xff1a; 文件传输协议 &#xff08;file transfer protocol&#xff09;&#xff0c;在不同的机器之间实现文件传输功能&#xff0c; 例如 视频文件下载&#xff0c;…