美文网首页
linux系统编程-应用编译运行的工作原理

linux系统编程-应用编译运行的工作原理

作者: Peakmain | 来源:发表于2019-10-08 14:32 被阅读0次

vim的工作模式

  • vim a.c(文件):打开文件
  • 写完数据后,esc+:wq退出
  • gcc a.c(源文件) -o a(生成的文件):编译成可执行的文件
  • ./a(执行的文件):运行可执行的文件
image.png

vim常用快捷键

跳转和删除

  • i:输入,光标前面
  • I:输入,光标前面
  • a:输入,光标会移动到
  • A:输入,光标会移动到最后
  • o:输入,光标会移动到下一行
  • O:输入,光标会移动到上一行
  • s:输入,会删除所在光标的字符
  • S:输入,会删除所在光标的行
  • h:左
  • j:下
  • k:上
  • l:右
  • gg跳到行首
  • G:跳到末尾
    -$:跳转到行尾
    -0:跳转到行首
  • gg=G:格式化代码
  • dw:删除单词,需要注意的是光标要在单词的开始
  • x:删除某个字符
  • d0:删除光标到行首
  • v+h/j/k/l:删除选中的区域
  • dd:删除整行
  • 3dd:删除3行

赋值和粘贴查找替换

  • yy复制
  • p:粘贴到下一行
  • P:粘贴本行
  • dd:其实是删除并赋值(剪切)
  • 3yy:赋值3行
  • *:跳转到下一个
  • /+define+回车:查找,n跳转到下一个,N是查看上一个
  • r+替换的字符:把当前字符替换成替换的字符
  • :s /要替换的字符/替换后的字符。末行模式下,只替换成光标所在行并且是前一个
  • :%s /要替换的字符/替换后的字符。 每一行都替换,而且是前一个
  • :%s /要替换的字符/替换后的字/g。替换所有
  • :1,3s /要替换的字符/替换后的字/g。替换1-3行的字符

其他

  • u:撤销
  • ctrl+r:反撤销
  • sp:分屏
  • ctrl+ww:切换分屏
  • q:退出当前
  • wqall:保存退出全部

gcc编译四步骤

  • 1.预处理阶段
    宏定义展开,宏定义替换,展开include的文件
    gcc -E -o xx.i xx.c

  • 2.预编译阶段
    GCC才会去检查你代码的规范性,语法是否有错误,gcc会把代码翻译成汇编

  • 3.汇编阶段
    gcc -S -o xx.s xx.i
    把.s文件翻译成二进制.o文件(机器的指令),文本打开的是乱码

  • 4.链接阶段
    计算逻辑地址,合并数据段,有些函数是在另一个so库文件中的

动态库和静态库

区别
静态库:其实就是内容的拷贝,运行阶段没有.a文件了也是可以执行的

动态库:不会拷贝内容,没有so不能运行的。运行阶段的作用,生成so的时候要生成与位置无关的代码

静态库动态库生成
生成静态库

  • .c文件生成.o文件
    gcc -c xx.c -o xx.o

  • 使用ar工具制作静态库
    ar ras libxx.a xx.o xxx.o

  • 编译静态库到可执行的文件
    gcc xx.c libxx.a -o hello

生成动态库

  • .c文件生成.o文件(要生成与位置无关的代码)
    gcc -c xx.c -o xx.o -fPIC

  • 使用gcc -shared 制作动态库
    gcc -shared -o libxx.so xx.o xxx.o

  • 编译动态库到可执行的文件,需要指定动态库的名称,指定库的路径
    gcc a.c -o a -l名称 -L../

虚拟机内存

虚拟内存布局图.png

相关文章

网友评论

      本文标题:linux系统编程-应用编译运行的工作原理

      本文链接:https://www.haomeiwen.com/subject/kofrpctx.html