03.linux系统编程——常用工具(vim、gcc、动静态 库makefile)

个人2019年上半年学习笔记,如有侵权,请联系删除。
在这里插入图片描述
在这里插入图片描述

常用工具

以前:
编辑器:gedit
编译器:gcc
执行:
现在:
编辑器:vim
编译器:gcc

vim有四种模式:

命令行模式:

打开默认进入的是命令行模式,
务必记住下列命令:
(n)dd删除指令 ---->是不需要加括号的,直接敲‘3dd’就可以删除光标之后后3行
(n)yy复制
p ---->光标所在的下一行进行粘贴,当复制的时单词时,会在光标之后进行粘贴
(n)yw
u
ctrl + R

ctrl + u
ctrl + d
ctrl + f
ctrl + b
(注意这里的‘前后’,屏幕向下是往前)

指针调转指令:
gg:文件开头
G:文件末尾
(n)G:到第n行

返回命令行模式:Esc键
返回底行模式:’:’
底行模式下,
输入:‘q’,回车即可退出,
输入:'q!'可以强制退出,此时未保存修改
输入:‘wq’

**

插入模式:

**
先进入命令行模式,在命令行模式输入以下命令:

insert		-->嵌入 

	i:将文本插入到光标所在位置 
	I:将文本插入到当前行首

appending -->追加
	a:在光标之后追加
	A:在光标所在的行尾进行追加

open -->打开
	o:在光标所在行后,新建一行进行插入
	O:在光标所在行前,新建一行进行插入

底行模式:

先进入命令行模式,在命令行模式,输入:’:’,即可进入底行模式
w:
q:
!:
q!:
w!:
wq:
shift + zz:保存退出

在底行模式,搜索search:
/“字符串”,敲击回车,即可向后搜索
n:往下翻找
N:往上翻找
?“字符串”,敲击回车,即可向前搜索
(最终都会全篇搜索)

noh,敲击回车,即可取消高亮显示

在底行模式,替换replace:
全篇替换: %s /“源字符串”/“目标字符串”/g,敲击回车,即可替换
指定行替换: “起始行”,“终止行” s/“源字符串”/“目标字符串”/g

可视模式:

在命令行模式,按下’v‘,即可进入可视模式:
	d:直接按仅复制光标所在的那一个字符,如果选中了文本,即可复制选中的文本
	y:
	x:
	(可视模式和word等中的文本操作差不多,可以结合鼠标选中文本)

注:
(1):wq ---->退出vim
(2)在管理员的家目录设置的.vimrc文件,普通用户是没法使用的,如果在/etc配置的.vimrc文件既可以root用户使用,也可以普通用户使用。
(3)vim也可以打开文件夹(目录),
鼠标点击打开的文件夹中的蓝色文件目录,会将点击的文件夹内容进行 展开显示
(目录也是特殊的文件)

	vim中tab键和space键更好区分

注:ubuntu自带了vi编辑器,但现在常用vim编辑器

xx.c文件编译过程:

**1)编译预处理:**处理伪指令、#(比如,#include、#define、#if等)、特殊的特殊符号
注:.h文件只放了声明
gcc -E xx.c -o xx.i
2)编译–检查语法,生成汇编文件
gcc -S xx.i -o xx.s
3)汇编–生成二进制文件
as xx.s -o xx.o
.h 放函数声明reference
.c 放函数定义definition
4)链接
链接所需要的库,生成可执行的文件
库默认在下列路径去查找:
/lib
/usr/lib

#include “spi.h” ——》先去当前路径查找,再去默认路径查找
#include <stdio.h> ——》直接去默认路径查找

查看默认路径指令:cpp -v
在这里插入图片描述

man一下 atoi 函数
在这里插入图片描述
练习:
写一个main.c
再写一个fun.h
再写一个add.c
在写一个sub.c

回顾:

1)再次理解双引号和尖括号在#include使用的时候的区别

使用下列指令,生成静态库

gcc -c add.c -o add.o gcc -c sub.c -o sub.o 

ar rc libfun.a add.o sub.o
	此时,会在当前路径生成libfun.a文件
gcc main.c -L./ -lfun

库的作用:

	形成库之后,可以不要任何源码支撑,当源码改变的时候,静态库需要手动更新,动态库可以实时更新。

在这里插入图片描述

下列语句实现,实现动态库:
gcc -c add.c -o add.o 
gcc -c sub.c -o sub.o 
gcc -share -fPLC sub.o add.o -o libfun1.so  
mv libfun1.so /usr/lib  
gcc main.c -lfun1 ./a.out 1 + 4

批注:动态库会在代码执行时去默认路径进行加载

可以在头文件时,指定默认路径之后的具体路径:
#include <fun/fun.h>

选项	含义
-c	只编译并生成目标文件
-E	只运行 C 预编译器
-g	生成调试信息。 GNU 调试器可利用该信息
-o	FILE 生成指定的输出文件。用在生成可执行文件时
-S	只激活预处理和编译,就是指把文件编译成为汇编代码
-l	指定要链接的库(原库名去除前缀 lib 和后缀“.a/.so” 的剩余部分)
-L dir	指定链接阶段链接库所在路径
-shared	生成共享目标文件。通常用在建立共享库时
-fPIC	生成动态链接用位置无关代码 (Position-independent code)

-I dir	在头文件的搜索路径列表中添加 dir 目录

在这里插入图片描述
gdb调试
在这里插入图片描述

gdb + 可执行文件(例如,./a.out)  //提示信息  (gdb) start   //停在主函数第一句前边
设置断点:breakpoint 行号
查看断点信息:info breakpoint
查看变量值:p + 变量名
(去看手册或课件,手册讲的很详细)

工程管理工具 makefile

在这里插入图片描述

目标:依赖
命令(命令前边必须是一个tab键)
在终端输入:vim makefile,新建一个makefile文件
#目标:依赖 main:main.o     gcc main.o -o main main.o:main.s     as main.s -o main.o main.s:main.i     gcc -S main.i -o main.s main.i:main.c     gcc -E main.c -o main.i clean:     rm *.c *.o
tips:
1)一个文件夹里边只能有一个makefile
2)makefile中用井号进行注释
3)makefile的第一行是最终目标
4)也可以在终端重新制定终极目标
	make 目标
5)如果在makefile 中末尾写了clean的伪指令,则可以在终端清除make生成的文件,使用下列指令:
	make clean
6)熟悉下列变量:
	$@:
	$^:
	$<:
	$(定义的变量名)

在这里插入图片描述
在这里插入图片描述

编译时也可以指定头文件的路径:
gcc main.c -L../lib -lfun -I../inlcude

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值