[Linux] 编辑器vim、编译器和动静态链接

1. 编辑器vim

编辑器vim用于编辑代码文件,搭建专业的vim开发环境请参考作者此篇文章:

告别默认Vim:Linux下轻松配置Vim开发环境

vim包含12种总模式,常用:

  1. 正常模式:移动光标 / 删除字或行 / 移动复制...
  2. 插入模式:编辑代码
  3. 底行模式:保存和退出 / 文件替换 / 查找 / 列出行号...(偏命令风格

三种模式的切换方式如下图:

基本操作:

  1. 进入vim:vim + 文件名,默认正常模式
  2. 保存文件::w
  3. 退出vim::q(保存并退出:wq

正常模式重点命令集:

  1. 上下左右:kjhl
  2. 删除字符:x
  3. 复制:yw
  4. 替换:r
  5. 撤销和恢复:u和ctrl+r
  6. 跳至指定行首:#G(#为行数

底行模式重点命令集:

  1. 显示行号:set nu
  2. 查找:/ + 字符? + 字符
  3. 跳到某一行:#(行号

补充知识:

  1. vim + 新文件名:wq会创建新文件,保存并退出;:q退出且不创建文件
  2. 多窗口编辑:vs + 文件名;先退出光标所在终端;切换窗口:ctrl + ww
  3. 打开文件+定位行:vim 文件名 +行号(eg:vim code.cpp +11进入code.cpp且定位第11行
  4. shell功能:!v查询最近的v开头(vim)指令
  5. 视图模式:正常模式ctrl + v进入,支持选区,shift + i可批量添加注释,按esc生效

2. 编译器:gcc / g++

C/C++程序的编译过程:

  1. 预处理(宏替换/去注释/条件编译/头文件展开
  2. 编译(高级语言->汇编语言
  3. 汇编(汇编语言->二进制
  4. 链接(所有.o文件链接为可执行文件

条件编译

  • 含义:根据预定义条件决定代码的哪一部分参与编译 / 被忽略(编译期静态裁剪
  • 用途:内核源码 / 软件专业度版本 / 应用适配不同平台

C++源码示例:

gcc / g++编译选项:

gcc/g++ [选项] 编译文件 [选项] [目标文件]

编译过程分步骤展示:

step1:创建文件

step2:预处理

-E预处理完成后截停

step3:编译

-S编译完成后截停

step4:汇编

-c汇编完成后截停

step5:链接

step6:运行

补充:

  • 只执行-o会一步到位编译为可执行文件;开发中更常用的是逐个编译-c后再链接-o(编译效率更高
  • Linux的可执行文件可不加后缀,通过权限和内容识别

3. 动静态库和链接方式

一些概念:

  1. 动态库:库文件后缀.so (linux / .dll (windows
  2. 静态库:库文件后缀.a (linux / .lib (windows
  3. 库名:去掉文件前后缀剩下的部分(eg: libc.so,去掉前缀lib,后缀.so,得到库名c

动态/静态链接

  • 动态链接:运行时跳转到库代码执行库函数
  • 静态链接:链接时拷贝库方法到程序中,脱离静态库独立运行

验证:

创建一个.cpp文件:

编译成可执行程序,可以看到默认是动态链接的,大小为16528字节:

静态链接需要下载静态库和选项-static

编译成可执行程序,可以看到是静态链接且大小为2403984字节:

运行:

总结 :动态链接形成的可执行程序体积更 / 节省内存和磁盘 / 对库的依赖度大;静态链接相反

感谢阅读,我们下篇见。

相关推荐
lzx_0021 小时前
Linux指令(一) 简单了解部分指令
linux
小则又沐风a1 小时前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp
bosins11 小时前
WSL2 启动即崩溃?调整超时参数解决 Docker 阻塞问题
linux·docker·wsl
web守墓人12 小时前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
kuroomi12 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
daemon.qiang12 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
2401_8697695914 小时前
linux 权限 指令与权限(重启之后)
linux
码农客栈14 小时前
Linux CAN 驱动
linux·驱动开发
GeW15 小时前
红帽RHCE从挂科边缘到一次过,我做对了什么
linux