Linux 编译
1.vim编辑:
模式:按i进入插入模式,按Esc进去命令模式
保存和退出:命令模式下,:w表示保存, :q表示退出 :q!强制退出(不保存)
搜索字符串:命令模式下,/string表示向下搜索字符串 ?string向上搜索字符串 按n进行下一个 开启忽略字符串大小写::set ignorecase 关闭::set noignorecase
替换字符串:语法::[range]s/pattern/string/[c,e,g,i] range表示替换范围,%表示全文替换 pattern为待替换字符串,string为将替换字符串 c表示替换询问,e不显示错误信息,g表示替换一行所有匹配项,i忽略大小写
删除:命令模式下,dd删除光标所在行,x删除单个字符,r替换单个字符
复制:命令模式下,yy复制光标所在行,nyy复制n行
粘贴:命令模式下,p粘贴复制/删除的内容
撤销和重做:命令模式下,u撤销一次操作 Ctrl+R重做被撤销的操作
分屏:命令模式下,:sp横屏分,:vsp竖屏分,ctrl+ww切换屏 ,q退出该屏
跳转man手册:命令模式下,K查看该命令手册
vim中编译:命令模式下,:!./xx.c
2.gcc:
四步骤:预处理(gcc -E)->编译(gcc -S)->汇编(gcc -c)->链接(无参数)
预处理:
编译:消耗时间和系统资源最多
汇编:
链接:
-I:指定头文件目录位置:
-g:添加调试语句,支持gdb调试
3.静态库制作和使用:
(1)将.c文件编译为.o文件 gcc -c xxx.c -o xxx.o
(2)使用ar工具制作静态库 ar rcs libmylib.a xxx.o
(3)编译代码和静态库 gcc xxx.c libmylib.a -o xxx.o
注意:制作静态库也要配套制作静态库头文件
头文件守卫: #ifndef XXX_H
#define XXX_H
.....
#endif
4.动态库制作和使用:
(1)将.c文件编译为.o文件 gcc -c xxx.c -o xxx.o -fPIC
(2)使用gcc -shared制作动态库 gcc -shared -o libmylib.so xxx.o
(3)编译可执行程序时指定动态库 -l指定库名(去掉lib前缀和so后缀),-L指定库路径 gcc xxx.c -o a.out -lmymlib -L/目录
(4)运行:./a.out
出错:链接器:在链接阶段工作,需要-l和-L
动态链接器:在程序运行时工作,需要提供动态库所在目录位置; 通过环境变量改变解决 export LD_LIBRARY_PATH=动态库路径
注意:永久生效需要写入终端配置文件: vim .bashrc 写入export LD_LIBRARY_PATH=动态库路径
5.gdb调试工具:
编译时带-g得到调试表
通过gdb a.out进行调试
list:列出源码
break:设置断点
run:运行,出现段错误可直接定位
next:下一条指令(会越过函数)
step:下一条指令(不会越过函数)
print:展示变量值
continue:继续执行断点后续指令
quit:退出gdb
set args:设置main函数参数(在run之前)
bt:查看当前存活栈帧
frame:切换栈帧
display:设置追踪变量