上篇文章:Linux基础3-基础工具1(什么是工具,yum,vim基础)-CSDN博客
本章重点:
vim详解
gcc详解
目录
[一. vim详解](#一. vim详解)
[1.1 命令模式](#1.1 命令模式)
[1.2 插入模式](#1.2 插入模式)
[1.3 底行模式](#1.3 底行模式)
[二. gcc/g++](#二. gcc/g++)
[2.1 程序的翻译过程(c/c++代码执行过程)](#2.1 程序的翻译过程(c/c++代码执行过程))
[2.2 gcc/g++使用说明](#2.2 gcc/g++使用说明)
[2.3 动态链接与静态链接](#2.3 动态链接与静态链接)
[2.4 查看Linux文件的链接方式和使用的标准库](#2.4 查看Linux文件的链接方式和使用的标准库)
[2.5 gcc/g++直接生成可执行文件](#2.5 gcc/g++直接生成可执行文件)
[2.6 gcc使用静态链接](#2.6 gcc使用静态链接)
[三. 下章重点](#三. 下章重点)
[3.1 自动化构建工具make,makefile](#3.1 自动化构建工具make,makefile)
[3.2 Linux调试器gbd的是用](#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++代码执行过程)
预编译:去掉注释,头文件展开,宏替换,条件编译
编译:检查语法,将代码转换为汇编代码
汇编:将汇编代码转化为可重定向的二进制机器指令(不可执行的二进制目标文件)
链接:链接多个二进制目标文件,形成可执行的目标文件
2.2 gcc/g++使用说明
例如:我们想编译运行下列代码,文件名字为 test.c
cpp
#include<stdio.h>
int main()
{
printf("hello wolrd!\n");
return 0;
}
- 预编译
cpp
gcc -E test.c -o test.i
-E #执行程序的预编译工作,完成后停下来
-o #指形成文件的临时文件名称
- 编译
cpp
gcc -S test.i -o test.s
-S #表示完成程序的编译阶段,变成汇编代码之后,停下来
- 汇编
cpp
gcc -c test.s -o test.o
#完成程序的汇编工作,生成可重定向的不可执行二进制文件。停下来
- 链接
cpp
gcc test.o -o test
#链接的过程,将库中的代码和我们自己写的代码链接起来,形成可执行的二进制文件
- 运行test
cpp
./test
# ./ + 可执行二进制文件 即可运行
2.3 动态链接与静态链接
链接的本质(关联我们的代码和库代码)
我们写代码只是写了代码的调用,没有写对应的实现。只有当我们链接库代码之后,标准库的实现代码才能和我们的代码关联
动态链接:讲我们的程序和通过连接器和标准库关联,需要使用标准库的时候去标准库中找
静态链接:链接的时候,不和标准库关联,而是在我们程序内部,将要用的方法,给我们拷贝一份,就完成了静态链接
动静态链接的优缺点:
动态链接:由于没有拷贝,形成的可执行文件非常小,节省资源(占用内存,磁盘小,也方便别人下载)。
静态链接:不受库文件的升级或者删除,但是形成的可执行文件非常大,且如果有多个可执行文件,会造成代码高度重复。
2.4 查看Linux文件的链接方式和使用的标准库
前置知识:
- Linux文件库的命名
动态库:libxxxxx.so
静态库:linxxxxx.a
file + 文件 (可以查看文件的链接方式)
ldd + 文件 (可以查看文件使用的标准库)
C语言
C++
从图中也可得出:gcc/g++ 默认使用的是动态链接
运行结果如下:
2.5 gcc/g++直接生成可执行文件
cpp
gcc test.c -o test
# gcc .c文件 -o 可执行目标文件
# 即可直接生成可执行文件
举例:
2.6 gcc使用静态链接
- 如果没有下载.c静态库需要先下载
- 使用静态链接
cpp
gcc test.c -o test.s -static
# gcc 代码文件.c -o 可执行目标文件 -static
# 目标文件可以使用.s进行标识
举例:
可以看出静态链接的可执行文件非常大
test.s 比 test 大 100倍左右
静态链接无法ldd
使用file进行查看,为静态链接
像shell python 这种脚本语言在linux中可以直接运行
甚至使用chmod+可执行权限就能直接运行