• 【Linux】vim_gcc_动静态库


    一、vim

    一款多模式编辑器

    vim工具有三种基本模式:命令模式、插入模式、底行模式

    • 正常/普通/命令模式(Normal mode)

    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

    • 插入模式(Insert  mode)

    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。

    • 末行模式(last line mode)

    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模 式。要查看你的所有模式:打开vim,底行模式直接输入

    一些常用的命令:

    1. vim末行模式命令集:

    • 列出行号

    「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

    • 跳到文件中的某一行

    「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。

    • 查找字符
    • 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按
    • 「n」会往后寻找到您要的关键字为止。
    • 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
    • 问题:/ 和 ?查找有和区别?操作实验一下
    • 保存文件

    「w」: 在冒号输入字母「w」就可以将文件保存起来

    离开vim

    • 「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
    • 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

    2.命令模式

    • 插入模式
    • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
    • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
    • 从插入模式切换为命令模式
    • 按「ESC」键。
    • 移动光标
    • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格
    • 按「G」:移动到文章的最后 按「 $ 」:移动到光标所在行的“行尾” 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头
    • 按「e」:光标跳到下个字的字尾
    • 按「b」:光标回到上个字的开头
    • 按「#l」:光标移到该行的第#个位置,如:5l,56l
    • 按[gg]:进入到文本开始
    • 按[shift+g]:进入文本末端
    • 按「ctrl」+「b」:屏幕往“后”移动一页
    • 按「ctrl」+「f」:屏幕往“前”移动一页
    • 按「ctrl」+「u」:屏幕往“后”移动半页
    • 按「ctrl」+「d」:屏幕往“前”移动半页
    • 删除文字
    • 「x」:每按一次,删除光标所在位置的一个字符
    • 「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
    • 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
    • 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
    • 「dd」:删除光标所在行
    • 「#dd」:从光标所在行开始删除#行
    • 复制
    • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
    • 「#yw」:复制#个字到缓冲区
    • 「yy」:复制光标所在行到缓冲区。
    • 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
    • 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。
    • 替换
    • 「r」:替换光标所在处的字符。 
    • 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
    • 撤销上一次操作
    • 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回 复。
    • 「ctrl + r」: 撤销的恢复 更改
    • 「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字
    • 跳至指定的行
    • 「ctrl」+「g」列出光标所在行的行号。
    • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

    二、gcc

    gcc是一款编译器,用于进行C语言的编译

    编译格式

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

    选项:

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

    三、动静态库

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

    动态链接相当于,在编译链接时,通过库的声明,去找到库里面的方法。

    静态库相当于,在编译链接时,在自己文件中拷贝一份库方法。

    举一个例子:

    动态:我们在学校里面,我们想要使用电脑,我们知道电脑在外面的那个地方,我们就可以去指定的地方寻找。

    静态:我们想要使用电脑,我们就干脆直接买一台电脑。

    使用动态库,默认生成的就是使用动态库

     使用静态库,编译时使用static选项

     

     

  • 相关阅读:
    2024最新大厂C++面试真题合集,大厂面试百日冲刺 bay3
    FinClip 自有账户体系是怎么做的?
    思腾云计算
    视觉SLAM14讲笔记-第5讲-相机与图像
    DOSBox解决CPU从内存单元中要读取数据
    RS-232/485信号转标准模拟信号输出隔离D/A转换器 控制远程设备
    链表经典算法题目
    代码源每日一题div1 贪心 线性筛 最小生成数
    与分类有关的一种时序优先现象
    国内外都可以使用的【免费AI工具】,实用性满满
  • 原文地址:https://blog.csdn.net/weixin_63246064/article/details/126165213