在学习Linux命令基础总结了笔记,并分享出来。
08-linux-day02(vim-gcc-library)
目录:一、学习目标二、vim1、vim光标的移动2、vim删除内容3、vim复制粘贴与可视模式4、vim查找、格式调整、查看man文档5、vim从命令模式到编辑模式6、vim行末查找替换与保存退出7、vim分屏模式8、vim的设置三、gcc编译1、gcc编译流程2、gcc流程和相关参数3、gcc编译参数24、gcc补充说明四、库1、静态库的制作和使用2、动态库的制作3、动态库的使用4、静态库和动态库的总结
一、学习目标
1、掌握vim命令模式下相关命令的使用
2、掌握从命令模式切换到编辑模式的相关命令
3、掌握vim末行模式下相关命令的使用
4、能够说出gcc的工作流程和掌握常见参数的使用
5、熟练掌握Linux下的静态库的制作和使用
6、熟练掌握Linux下的共享库的制作和使用
二、vim
1、vim光标的移动
vi与vim——vim是vi增强版
》安装vim:sudo apt-get install vim
》设置vim作为默认的文本编辑器
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 1
sudo update-alternatives --set editor /usr/bin/vim
sudo update-alternatives --install /usr/bin/vi vi /usr/bin/vim 1
sudo update-alternatives --set vi /usr/bin/vim
》查看vim教程文档:vimtutor
移动光标:
h:左;j:下:;k:上;l:右
0:行首;$(Shift+4):行尾
gg:文件第一行
G:文件尾部
12D:调到第12行
2、vim删除内容
x:删除光标所在的位置字母
u:撤销
X:删除光标之前的位置字母
dw:删除单词和一个空格(光标要定位到单词的第一个字母)
d$(d+Shift+4)删除光标到行尾
d0:删除光标到行头
D:删除光标到行尾,同d$
dd:删除光标所在行(剪切)
ndd:删除光标所在行开始n行
DD:删除两行
3、vim复制粘贴与可视模式
yy:复制一行内容
dd:剪切一行内容
nyy:复制n行内容
p/P:粘贴(注意:粘贴行不一样!)
r:替换,输入r之后,再输入一个字母
》可视模式
v进入可视模式;
移动光标选中内容;
按y复制内容;
移动光标到目的地
按p/P将内容粘贴
4、vim查找、格式调整、查看man文档
》查找
/srcpattern
n/N:进行遍历,注意向前还是向后
?srcpattern
n/N:进行遍历,方向与/的方式相反
#:光标移动到字符串上,按#,可以查找该字符串
》格式调整:
gg=G:代码文件整体调整格式(在命令状态下直接输入,不需要输入冒号,gg是文件首,G是文件尾,所以 gg=G 是整理全部代码。)
>>当前行向右移动一个Tab
<<当前行向左移动一个Tab
n>>当前行开始n行,向右移动一个Tab
n<<当前行开始n行,向左移动一个Tab
》man帮助查看K或者n+K
5、vim从命令模式到编辑模式
命令模式变为编辑模式(啊,IOS)
i:在光标前插入
a:在光标后插入
I:在行首插入
A:在行尾插入
o:下一行插入
O:上一行插入
s:删除当前字母,变为插入模式
S:删除当前行,进入插入模式
6、vim行末查找替换与保存退出
》末行模式:(输入:进入末行模式)
执行命令
:!ls -l
》代码替换
:s/src/des/——只会替换当前行第一个匹配的src为des
:s/src/des/g——只会替换当前行所有的src为des
:%s/src/des/——只会替换所有行的第一个匹配src为des
:%s/src/des/g——替换文件内容所有的src为des
》保存退出
:wq——保存退出
:w——只保存
:q——只推出,文件不能修改
:q!——强退
:x——保存退出
ZZ——保存退出(命令模式下)
7、vim分屏模式
:sp——横分
:vsp——竖分
:qall——全退,不保存
:wqall——全保存
8、vim的设置
vim下载:https://github.com/chxuan/vimplus
安装vimplus
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
/home/user/.vimrc——本用户的配置文件(user要替换为对应用户名)
/etc/vim/vimrc——系统vim配置文件
set -o vi,在系统环境设置此项,可以在当前shell环境下使用vi快捷键。
注意:终端需要重启或者执行(~/.bashrc)才能生效!
三、gcc编译
1、gcc编译流程
2、gcc流程和相关参数
-c——>编译成.o文件
-E——>输出到标准输出,宏替换,头文件展开
-S——>编译成汇编
-I(大i)——>包含头文件路径(可以绝对路径,可以相对路径)
如:gcc add.c -I./include/ -D DEBUG -o app -g -Wall -O1
-o——>目标文件
-D——>指定宏编译
3、gcc编译参数2
-L——>包含库文件路径
-l——>(小写L)指定库名称(通常libxxx.so或者libxxx.a,-lxxx)
-r——>编译成.o文件
-g——>用户gdb调试,不加此选项不能gdb调试
-Wall——>(warning all)显示更多的警告
-lstdc++——>编译c++代码
如:gcc hello.cpp -lstdc++ -o cpp -O
-O——>优化选项,1-3越高优先级越高
4、gcc补充说明
Ctrl+W+W:多屏切换
四、库
1、静态库的制作和使用
静态库的文件命名格式:libxxx.a(相当于Windows下的xxx.lib)
》制作步骤
(1)编译为.o文件
(2)将.o文件 打包:ar rcs libmycalc.a file1.o file2.o file3.o...
nm libmycalc.a——>查看libmycalc.a文件文件内容
(3)将头文件与库一起发布
如:将libmycalc.a移动到lib文件夹下
运行:gcc main.c -o app -I include/ -L lib/ -lmycalc(小写L)
》使用
编译时需要加静态库名(记得路径),-I包含头文件
Ubuntu下计算器:bc(退出:quit)
2、动态库的制作
动态库的文件命名格式:libxxx.so(相当于Windows下的xxx.dll)
》制作步骤
(1)编译与位置无关的代码,生成.o,关键参数-fPIC(有的Linux可以不加,为了统一,都加上!)
如:gcc -fPIC -c *.c -I ../include/ (大写i)
(2)将.o文件打包:关键参数-shared
如:gcc -shared -o libCalc.so *.o
(3)将库与头文件一起发布
如:将libCalc.o移动到lib文件夹下
运行:gcc main.c -o app -I include/ -L lib/ -lCalc(小写L)报错:找不到链接libCalc.so!
ldd app——检查链接(小写L)
得到:libCalc.so=> not found
3、动态库的使用
使用编译的时候与静态库一样,需要配置库的路径,保证ld链接器能够加载!
》使用
(1)-L指定动态库路径,-l指定库名
如:gcc main.c -o app -I include/ -L lib/ -lCalc(小写L)
(2)解决不能加载动态库的问题
1.拷贝到系统的/lib或/usr/lib库目录下,不允许
也可以使用软链接:sudo ln -s lib/libCalc.so /lib/libCalc.so(相对路径不行)
删除软链接:sudo rm /lib/libCalc.so
使用当前路径:sudo ln -s ~/linux/cmd/Calc/lib/libCalc.so /lib/libCalc.so
2.将库路径添加到环境变量,修改LD_LIBRARY_PATH环境变量,用冒号分隔,不是特别推荐
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/wang/linux/cmd/Calc/lib/:$LD_LIBRARY_PATH
export只是一次生效
要永久生效,把路径放入.bashrc中
3.配置/etc/ld.so.conf文件,增加/home/wang/cmd/Calc/lib路径,执行sudo idconfig -v(需要root权限!)
sudo vi /etc/ld.so.conf——打开ld.so.conf增加:
/home/wang/linux/cmd/Calc/lib
sudo ldconfig -v——设置生效
4、静态库和动态库的总结
》静态库优缺点总结
优点:1)执行速度快;2)发布应用时不需要发布库
缺点:1)执行程序体积会变比较大;2)库变更时需要重新编译应用
》动态库优缺点总结
缺点:1)执行时需要加载动态库,相对而言,比静态库慢;2)发布应用时需要同时发布动态库
优点:1)执行程序体积小;2)库变更时,一般不需要重新编译应用(如:接口更改,两数相加改为三数相加,需要重新编译)
在学习Linux命令基础总结了笔记,并分享出来。
标签:gcc,lib,vim,编译,so,Linux,光标 From: https://blog.51cto.com/u_15405812/5834773