IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Linux环境开发工具的使用. -> 正文阅读

[开发工具]Linux环境开发工具的使用.

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

一、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.c
	gcc -c main.c -o main.o
test.o:test.c
	gcc -c test.c -o test.o

.PHONY:clean
clean:
	rm -rf *.o mytest

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

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:15:37  更:2022-09-24 21:19:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:18:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码