栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux基础3

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux基础3

linux基础3

1.vim编辑器
2.gcc编译器
3.静态库的制作
4.动态库的制作
5.gbd调试

1.vim d的三种模式
vim 是从vi发展过来的一款文本编辑器
命令 : vi a.txt
前提:安装了vim软件
工作模式:
	1.命令模式--打开文件之后,默认进入命令模式
	2.编辑模式--需要输入一些命令,切换到编辑模式
	3.末行模式--在末行模式下可以输入一些命令

命令模式下的操作:
	1.光标的移动:h往左、l往右、j往下、k往上、0行首、$行尾、gg当前文本文件的首部、G当前文件的尾部、500G移动到第500行
	2.删除操作:x删除光标后面,X删除光标前面,dw删除单词当前光标的后面部分,d0删除当前行光标前面所有,d$/D删除当前行光标后面所有,dd删除当前行,4dd删除当前行(包括当前行)后面4行
	3.撤销操作: u ,U反撤销
	4.复制粘贴:
		yy复制,nyy复制多行 
		p粘贴在当前行的下边/P粘贴到当前行和当前行的下边
	5.可视操作:v进入可视模式, 然后用h、j、k、l选需要的内容,y复制选中,p粘贴在光标所在位置的后面但没有换行操作,P粘贴在光标所在位置的前面但没有换行操作,d删除选中
	6.查找操作
		/hello :从光标位置向下查找,最下后返回到头部
		?hello :从光标位置向上查找,最上后返回到尾部
		# :先移动到要查找的单词,在按#就会高亮显示这个单词
		遍历 n/N
	7.r:替换当前字符
	缩进:
		<< 向左
		>> 向右
	8.查看man文档 
		移动到该单词 在按 shift + k ,然后自动跳到man文档第一章开始搜索
					 按 3 + shift + k ,跳到第三章开始搜索
		q 退出
	ZZ:保存并退出
文本模式:
	从命令模式切换到文本模式
		a:在光标后面插入字符
		A:从当前行的尾部开始输入字符
		i:在光标前面插入字符
		I:在当前行的行首插入字符
		o:在光标所在行的下面新建一行插入内容
		O:在光标所在行的上面新建一行插入内容
		s:以删除一个字符为代价,插入字符
		S:以删除一行字符为代价,插入字符
末行模式下操作:
	从命令模式切换到末行模式: :(符号)
	操作:
		300:直接跳到第300行
		s/tom/jack 回车:替换当前行第一个 s为字符串,tom为替换前的内容,jack替换后的内容
		s/tom/jack g 回车:替换当前行所有 s为字符串,tom为替换前的内容,jack替换后的内容
		%s/tom/jack g 回车:替换文件所有 s为字符串,tom为替换前的内容,jack替换后的内容
		!+命令:执行命令
		w:保存
		q:退出
		q!:退出不保存
		wq:保存并退出
		x:保存退出
		水平分屏:sp (文件)
		垂直分屏:vsp (文件)
		ctrl ww:切换屏
		wq:保存并退出
		wqall:保存并退出所有的
	vim打造IDE:
		系统级配置文件目录:/etc/vim/vimrc
		用户级配置文件目录:~/.vim/vimrc
		
2.gcc编译器
1.编写c程序sum.c
2.对c程序进行编译
	预处理器生成.i文件
	gcc -E sum.c -o sum.i:
		-o:表示自定义预编译后的文件名称
	编译器生成汇编文件:
	gcc -S sum.i -o sum.s
	汇编器生成二进制文件
	gcc -c sum.s -o sum.o
	连接器生成可执行文件
	gcc sum.o -o app
	执行文件:
	./app

	一步到位:
	gcc sum.c -o myapp
		不加-o会生成名字为a.out文件,本质一样,只是名称不同。
		-I 头文件目录:*指定头文件目录
			gcc sum.c -I ./include -o myapp
		-D :*指定宏,通过宏向程序传参数
			gcc sum.c -I ./include -o myapp -D DEBUG
		-O:指定优化
			-O0/-O1/-O2/-O3:0不优化,依次更好,3是最高等级,优化最好
		-Wall:提示更多警告信息
		-g:添加调试信息
		-c:只编译子程序
		
3.gbd调试
静态库:
	1.命名格式:
		1.lib+库的名字+.a
		例如:libmytest.a
	2.制作步骤:
		1.生成对应的.o文件-- -c
		2.将生成的.o文件打包,工具 ar rcs +静态库的名字(libMytest.a) +生成的所有的.o文件、
		3.nm libMytest.a :就可以查看静态库中有哪些.o文件
	3.发布和使用静态库:
		1.发布静态库
		2.发布头文件
			例:对多个.c文件,以及其头文件在include中,制作静态连接库
			gcc *.c -c -I ../include
			ar rcs libMytest.a *.o 
			在当前目录生成一个libMytest.a静态链接库文件
			mv libMytest.a ../lib
			移动到连接库目录中
		3.使用方式1
			1.在main程序中包含库文件的头文件,在程序中直接使用头文件中的函数,
			2.编译时
				方式1:gcc main.c lib/libMytest.a -o app -I include
				方式2:gcc main.c -I include -L lib -l -o app
					-L:指定静态库的目录
					-l:指定库的名字,对于静态库libMytest.a,它的名字是Mytest。 
		4.优缺点
			优点
			1.发程序时不要提供对应的库
			2.应用程序执行时,库的加载比较快
			缺点:
			1.库被打包到应用程序中,导致程序的体积很大
			2.库发生了改变,需要重新编译程序

		

动态共享库
	1.命名规则:
		lib+名字+.so
	2.制作步骤:
		1.生成与位置无关的代码(生成与位置无关的.o文件)
			gcc -fPIC -c *.c -I include
		2.将.o打包成共享库(动态库)
			gcc -shared -o libMyCalc.so *.o -I include
			生成libMyCalc.so 文件
			mv libMyCalc.so ../lib
		3.发布。
			给用户提供头文件夹include 和libMyCalc.so
	3.使用动态库:
		方式1:gcc main.c lib/libMyCalc.so -o app -I include
		方式2:gcc main.c -I include -L ./lib -l  MyCalc -o app
		ldd :查看我们的可执行程序在执行时所有依赖的共享库
			ldd app
		如果执行时报错找不到共享库,先确认路径问题,如果还有问题
		解决方式1:将动态库libMyCalc.so文件放入linux根目录下的lib目录中(实际不能用,容易替换掉系统同名动态库,导致系统崩溃)
		解决方式2:配置 LD_LIBRARY_PATR环境变量,配置后会在默认的环境变量之前先搜索这个环境变量的路径,搜索默认的环境变量的路径
			打印该环境变量:echo $LD_LIBRARY_PATH
			给该变量赋值:export LD_LIBRARY_PATH=./lib
				export 导入
				./lib这里用的是相对路径,也可以用绝对路径
			这种方式终端关闭就失效了,得重新配置环境变量
		解决方式3:如果想永久配置就需要把	export LD_LIBRARY_PATH=绝对路径 写入~.bashrc中
		*解决方式4:
			1.需要找到动态链接库的配置文件--/etc/ld.so.conf
				sudo vi /etc/ld.so.conf
			2.动态库的路径写到配置文件中,将动态链接库的绝对路径写到末尾
				/home/itcast/3Day/Calc/lib
			3.更新 
				sudo ldconfig  (-v)
				-v:查看信
	4.优缺点:
		优点:1.执行程序体积小
			 2.动态库更新了,不需要重新编译程序,因为函数接口不变
		缺点:1.发布时,需要将动态库提供给用户
			 2.动态库没有被打包到应用程序中,加载速度相对较慢
			

	5.调试
		前提条件:可执行文件必须包含调试信息,也就是在生成可执行文件时加上 -g
		进入gdb:
			gdb+要调试的程序
		l:查看源代码(默认显示包含main函数的文件)
		l +要查看的程序的名字:行数    
		l +要查看的程序的名字:函数名
			l:要继续看后面
			回车:默认执行上一次从操作
		break/b 22(函数名) :在第22行打断点
		break/b 文件名:22(函数名) :在第22行打断点
		bredk 15 if i==15:条件断点,只能停在循环体内部
		info/i break/b :查看断点信息
		start:开始执行程序,只执行一步
		n:单步调试,一步一步调试
		c:继续执行,直到抵达下一个断点
		s:进入函数体内部
			l:进入函数体后,查看源代码
		p 变量:查看变量的值
		ptype 变量:查看变量的类型
		display 变量:追踪变量的值
			set var 变量=值:设置变量的值,当变量为该值时进行调试,一般用于循环中,提前到达所需的条件值
		undisplay 变量的编号:停止追踪这个变量
			info display:查看追踪变量的编号
		u:跳出单步循环体,进入循环后面的函数/退出当前循环
		finish:跳出当前排序c文件,回到main.c文件
			跳出之前需要把断点去掉,否则只能等待循环执行完毕才能跳出
		del/d 断点编号:删除断点
		run/r:运行程序,直接停在断点
		quit:退出gdb	 


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/939503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号