Linux下的vim编辑器与gcc编译器及静动态库的制作

1.vim编辑器的使用:
(1)vim的三种模式:
命令模式:打开文件默认进入命令模式
编辑模式:需要输入一些命令切换到编辑模式
末行模式:在末行模式可以输入一些命令
命令模式aios和AIOS都可以进入编辑模式
编辑模式esc可以进入命令模式
命令模式用:可以进入末行模式
末行模式两下esc可以进入命令模式

末行模式不可以和编辑模式相互转换

(2)命令模式下的操作(所有的删除操作都可以看成剪切):
h:光标左移
j:光标上移
k:光标下移
l:光标右移
0:光标移动到本行行首
$:光标移动到本行行尾
gg:移动到文件的头处
G:移动到文件的尾部
数字+G:跳转指定的行数
x:删除光标后边的一个字母
X:删除光标后边的一个字母
dw(注意把光标移动到单词的词头):删除一个单词
d0:删除本行光标前面的数据
D(或者d加shift4):删除本行光标后边的数据
dd:删除当前光标所在的行
数字+dd:删除从本行开始指定的数字行数
u:撤销
ctrl+r:反撤销
yy:复制光标本行内容
数字+yy:复制从本行开始后边的指定数字行数
P:粘贴到光标的所在行(如果本行有内容那么把内容下移一行)
p:粘贴到光标所在的小一行(如果下一行有内容那么把下一行再往下移动一行)
r:光标覆盖的字符可以更改(只是一个字符)
<<:向左缩进(前面可以跟数字)
>>:向右缩进(前面可以加数字)
K(光标放在该字符串上):可以查找函数等再man里边的内容

v:进入可视化操作
y(可视化):进入可视化操作后的复制
d(可视化):进入可视化操作的删除
P(可视化):把复制的文本放在光标所在的位置
p(可视化):把复制的文本放在光标所覆盖单词后边

查找文件的内容:
第一种方式: /+字符串
第二种方式:?+字符串
第三种方式:在文本里选定指定字符串,按#
这三种方法都可以按N/n进行遍历
(3)编辑模式下的操作:
a:在光标覆盖的字符的后边进行插入
A:把光标移动到本行尾部
i:在光标覆盖字符前面插入
I:把光标移动到本行的头部进行插入
o:在光标所处行的下一行开辟新的一行进行插入
O:在光标所处位置的上面一行进行插入
s:删除光标所覆盖的字符进行插入
S:删除本行所有的字符再重新编辑本行
(4)末行模式下的操作
输入:进入末行模式
在末行模式输入数字就会跳转到某一行
字符串的替换:
s/需要替换的字符串/新的字符串: 只能替换光标所在行的第一个需要替换的字符串
s/需要替换的字符串/新的字符串+/g:替换所有光标所在行指定需要替换的字符串
数字+,+数字+s/需要替换的字符串/新的字符串+/g:替换两个数字之间的所有行数需要替换的字符串

关于文本的保存:
q:不保存后退出
w:保存
wq:保存并退出

关于vim的分屏:
sp(可加当前目录的其它文件):为当前文件水平分层
vsp(可加当前目录的其它文件):垂直分屏
ctrl+ww:在两个屏幕之间切换
q:在分屏模式下,光标在那就退出那个窗口
qall:在分屏模式下把窗口有都删除
此外的w,wq同q

2.gcc编译器
(1)首先gcc编译器的工作原理:
在这里插入图片描述
(2) 这里注意预处理时和编译成汇编文件的参数是大写,到二进制文件是小写,也可以直接把.c文件直接编译成可执行文件直接把直接进行gcc+.c文件±o+可执行文件名-o对生成文件的名字做出一个指定

(3)当我们需要指定头文件时可以使用-I来指定头文件所在的地方
例如:== gcc c_program/a.c -I dir2/bb -o a.out==:就是指定并编译家目录下的c_program的文件下的a.c文件,然后a.c文件里的头文件包含在了家目录下的dir2目录下的bb目录里再利用-o为生成的文件取名(注意这里头文件只需要指定到其所在的目录即可)

(4) 当我们在编译的时候需要指定宏定义的时候使用-D就行了如: gcc a.c -D acm -o a.outt

(5)-O编译时优化代码分三级0,1,2,3(0不优化,123优化程度逐渐加深)

(6)-Wall显示警告信息:即使程序是对的,如果有一个变量定义了但是没使用也会有警告信息的

(7)-g添加一些调制信息

3.静态库:
(1) 静态库就是让程序员写的程序给用户完成指定功能(给定指定的静态库和头文件)用户可以用功能但是用户拿不到源码所有的维护都要程序员来修改源码。
(2)静态库的命名规则:
lib+静态库名+.a
(3)关于制作静态库的具体方法:
把所有需要用到的.c文件全部变成.o文件:gcc *.c -c
然后打包.o文件就合成一个静态库:ar rcs +静态库名+需要的.o文件
(4)关于使用静态库的具体案例:
首先在dir目录里有四个目录
include:头文件包含目录
lib:静态库目录
main.c:需要静态库辅助的用户.c文件
src:静态库的源码
第一步把src里边的.c编译成.o文件
第二步把生成的.o文件生成静态库
第三步把静态库移动到lib目录小
第四步就可以把静态库和include目录给用户
第五步用户利用这两个文件就可以实现自己的代码,具体是gcc main.c lib/静态库名±I+包含的头文件所在目录+ -o+生成的可执行文件的名字

对于第五步
还有一种做法:gcc main.c -L+静态库所在目录±l+所用静态库(不带lib和.a)±o+生成可执行文件米名
(第一个L大写第二个l是小写)
(5)静态库的优缺点:
静态库是打包了.o文件,那么使用静态库实现的可执行文件,只要用户写的原文件包含其中一个.o文件的函数那么可执行文件就会打包静态库里边这个.o文件所有内容放在可执行文件中
静态库的优点:
发布程序时候不用提供库(可执行程序已经包含库里边的内容)
加载库的速度块
静态库的缺点:
库被打包进入应用程序里边导致应用程序的体积增大
如果库发生了改变那么需要重新编译源文件

4.动态库(共享库)
(1)共享库的命名规则:
lib +名字+.so;
(2)动态库的创建过程:
第一步生成与位置无关的代码:静态库打包成与位置有关的代码,在每一个应用程序启动时linux系统都会生成一个虚拟化的内存空间由于使用静态库实现的应用文件静态库里边的内容被包含在内所以每次打开时被包含的静态库就会加载在虚拟化内存空间的相同位置,所以生成的.o文件称为与位置有关的代码,动态库不会把库里边的东西打包到可执行程序中只是做了记录,当程序启动后才会加载动态库(由于在动态库的位置不固定所以被称为与位置无关的代码),实际上也是要生成.o文件
gcc *.c -fpic -c -I+头文件目录所在位置
第二部将生成的.o文件打包:
gcc -shared -o +生成动态库的名字+要打包的.o文件(全部的话时*.o)±I+头文件所在目录
使用和静态库一样

发布了37 篇原创文章 · 获赞 52 · 访问量 1822

猜你喜欢

转载自blog.csdn.net/qq_45737068/article/details/104639986