在学习Linux命令基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
08-linux-day02(vim-gcc-library)
目录:
一、学习目标
二、vim
1、vim光标的移动
2、vim删除内容
3、vim复制粘贴与可视模式
4、vim查找、格式调整、查看man文档
5、vim从命令模式到编辑模式
6、vim行末查找替换与保存退出
7、vim分屏模式
8、vim的设置
三、gcc编译
1、gcc编译流程
2、gcc流程和相关参数
3、gcc编译参数2
4、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
/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命令基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。