[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字节:

运行:

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

感谢阅读,我们下篇见。

相关推荐
HideF8 小时前
Linux
linux·服务器·网络
Ruiery10 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
丰锋ff12 小时前
压缩命令笔记
linux
GeW14 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
by2099914 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
cq林志炫15 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
无人生还别怕16 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
企鹅侠客17 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
易点云徐源17 小时前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu
第404号工位17 小时前
离职退电脑前别只点“清空回收站”!手把手教你彻底抹除凭证与数字痕迹
linux·python·架构