Linux——基础(vim,gcc编译,静态库,动态库)

1,vim基本使用介绍

    vim被称为编辑器之神,vim是可以打造成IDE的,现阶段水平的作者用到,这里不再详述。只介绍简单的使用。

  • vim的三种模式

         1)命令模式 -- 打开文件之后,默认进入命令模式,vi 文件名字

         2)编辑模式/输入模式 --需要输入一些命令,切换到编辑模式

         3)末行模式 --在末行模式中可以输入一些命令(不保存退出:q,保存退出:wq,保存当前文件:w)

 

  • vim中的命令模式下操作

       vim中是不允许使用鼠标的,只能通过一些命令来操作。

       1)光标的移动: H 向前, J 向下, K 向上, L 向后, 0 移动到当前行的行首, $ 移动到当前行的行尾, gg 移动到当前文件的开始位置,G 移动到文件的尾部,500(任意数字) G   跳到对应的行500 G 是跳到第500行。

       2)删除操作:x  删除光标后面的字符,X 删除光标前面的字符, dd 删除当前行的内容,d0 删除这一行光标前面的内容,

D 删除这一行光标后面的内容,4dd 删除光标往后的4行数字4可以任意指定,u 撤销前一步操作,ctrl + r 反撤销

       3)粘贴操作:2)中讲到的删除,实质上并不是删除,而是剪切。执行上面的命令后,执行p|P就可以粘贴了。p是粘贴在光标所在行的下一行,而P是粘贴在光标所在行。

       4)复制操作: yy 复制当前行,nyy 复制光标后n行(包括光标行),

       5)可视模式:命令行模式时按v可以进去可视模式,在可视模式下,hjkl可以选择需要进行操作的文本数据,在可视模式下,d是删除,y是复制,p|P是粘贴。

       6)数据的查找 :   按/,之后输入要查找的数据,按回车即可。回车之后可以使用n在查找结果里进行来回切换。

                   要统计某个单词的个数,把光标移动到这个单词上,然后按#键,回车之后可以使用n在查找结果里进行来回切换。

       7)缩进: 向右缩进   >> ,向左缩进 <<

       8)保存退出:ZZ

  • vim编辑模式

       1)从命令模式切换到编辑模式的命令:

             a:在光标所在位置的后方插入                   A:在当前行的尾部插入

             i:在光标所在位置的前面插入                    I:在当前行的开始位置插入

             o:在光标所在行的下方开辟新的行           O:在光标所在行的上方开辟新的行

             s:删除光标处的字符,从字符后面开始插入   S:删除光标所在的行,并开始插入

  •  末行模式

      1)进入末行模式的方式: 从命令模式不能直接进去末行模式,只能从编辑模式下进入末行模式,通过:即可。

      2)行的跳转:输入末行后直接输入输入行号就可以做到行的跳转

      3)字符串的替换:

           在末行模式下,替换光标所在行的命令如下:s/要替换的文本/目标文本[/g]  注意,如果不加/g,说明只替换本行中的第一个匹配到的字符串,加上/g是替换所有匹配到的字符串。

           在末行模式下,替换所有行的命令如下:  %s/要替换的文本/目标文本[/g]   注意,如果不加/g,说明只替换所有行中的第一个匹配到的字符串,加上/g是替换所有行所有匹配到的字符串。

           在末行模式下,替换指定行的命令如下: 起始行,结尾行s/要替换的文本/目标文本[/g] 注意,如果不加/g,说明只替换指定行中的第一个匹配到的字符串,加上/g是替换指定行所有匹配到的字符串。

      4)在末行模式下是可以输入命令的: pwd,ls等等,注意,w是保存修改的文件,q是退出末行模式,wq是保存退出,q!是不保存退出。

      5)分屏命令:

            水平分屏: sp  [文件的名字]

            垂直分屏(比较常用): vsp [文件的名字]

            注意,ctrl + ww就可以在两个屏幕之间切换,文件的名字是可选的,如果不写的话,默认将本文件分屏,如果写的话就是将指定文件的内容显示在新增加的文件中。注意,退出时,想退出那个就在哪个屏幕下输入命令即可,也可以在命令的后面加all,对两个屏幕同时操作,比如,qall,含义是退出所有屏幕。

2,GCC编译器

  •    gcc编译器的编译过程     

       注意gcc在编译.c文件的时候会经过四步(注意命令的大小写):

           第一步:通过 gcc -E命令调用预处理器对.c文件执行预处理,此时的操作会将头文件展开,把宏替换掉,去掉注释。此时还是.c文件。

           第二步:通过gcc -S命令把预处理后的文件编程汇编文件,此时文件后缀是.s

           第三步:通过gcc -c命令调用汇编器对汇编文件进行编译生成二进制文件,此时文件后缀是.o

           第四步:通过gcc 命令调用链接器,将二进制文件链接成可执行程序。

  • gcc的一些参数

     通过gcc XXX.c -o myapp命令可以直接生成可执行程序,上面的1,2,3步在背后执行。不指定-o时会默认生成a.out可执行程序。

     下面对一些常用参数进行说明:

      -I 指定头文件的路径   gcc XXX.c -I 路径 -o 可执行程序的名字

      -D 指定宏的名字 gcc XXX.c -I 路径 -o 可执行程序的名字 -D 指定宏的名字

      -O[1|2|3] 编译的时候是否优化,3的等级最高

      -Wall 编译的时候,输出警告信息

      -g 添加调试信息

      -L 指定静态库的路径

      -l 指定静态库的名字,注意静态库的命名规则是lib + 库的名字 + .a,此时只写库的名字

3,静态库

  •   命名规则: lib + 库的名字 + .a(注意linux中静态库的后缀是.a)
  • 制作静态库

       第一步:生成对应的.o  ,将.c文件生成.o文件的命令  gcc -c

       第二步:将.o文件打包  命令是: ar rcs 生成的静态库的名字(libMytest.a)  所有的.o  

  • 发布和使用静态库(要给两部分内容)

       1)发布静态库

       2)头文件(提供这个主要作用是告诉用户这个库提供了哪些接口)

       使用库时,有两种方法:

           第一种: gcc XXX.c lib/libXXX.a(静态库的路径) -I头文件的路径 ,,这种是直接指定的方式

           第二种: gcc XXX.c -L lib路径 -l XXX -I头文件的路径 ,,这种是使用-L和-l参数的方式

  • 静态库的优缺点

      注意可以使用nm 静态库的名字这个命令来查看静态库里面的内容。

      优点:1)发布程序时,不需要在提供库,因为已经打包好了。2)加载库的速度比较快

      缺点:1)因为打包的时候是以.o为最小单位的,把库打包到应用程序中,导致库的体积很大。注意,一个.o文件中可能有几个函数,但是在写的程序中用到其中一个函数,就要把整个.o文件打包到应用程序中。

                 2)库发生改变的时候需要重新编译程序。

4,动态库

  • 命名规则: lib + 库的名字 + .so
  • 制作步骤

        第一步:生成与位置无关的代码(生成与位置无关的.o) 命令: gcc -fPIC -c *.c -I头文件路径

        第二步:利用上一步生成的.o 生成动态库 gcc shared -o libXXX.so *.o(所有的.o)       

  • 发布和使用动态库(要给两部分内容)

             1)发布动态库      

              2)头文件(提供这个主要作用是告诉用户这个库提供了哪些接口)       

        使用库时,有两种方法:

           第一种: gcc XXX.c lib/libXXX.so(动态库的路径)  -o 输出应用程序的名字 -I头文件的路径 ,,这种是直接指定的方式

           第二种: gcc XXX.c -L lib路径 -l XXX -I头文件的路径  -o 输出应用程序的名字,,这种是使用-L和-l参数的方式

           可以使用ldd命令来查看应用程序所使用的所有的共享库(动态库)。

  • 动态连接库链接不成功的解决方案

      第一种方法: 在linux中,LD_LIBRARY_PATH中存放的是,可以存放动态库的除了默认路径之外的其他路径。将自己做的动态库的路径加到LD_LIBRARY_PATH中,执行命令export LD_LIBRARY_PATH=自己做的动态库的路径,就可以了,但是这种方法只是临时的,关掉终端就不可以了,因此可以用做测试的时候使用。

     第二种方法:可以实现永久的设置,将路径配置在bash的配置文件.bashrc中,将语句export LD_LIBRARY_PATH=自己做的动态库的路径写在配置文件的最后一行就可以了。这种方法,设置好,需要重新启动虚拟终端才可以生效。

     第三种方法(必须掌握的):

           第一步:需要找到动态链接库的配置文件 etc/ld.so.conf

           第二步:把自己做的动态链接库的路径写到里面

           第三步:执行完第二步,动态链接器还不知道自己的配置文件已经被修改,因此需要做一个更新的操作,

                          命令是sudo ldconfig -v(查看信息输出)

  • 动态库的优缺点

     优点:如果使用动态库,是不会把库的代码打包到应用程序中的,因此使用动态库的应用程序的体积比较小。使用动态库只是在程序中做一个标记,等程序运行起来的时候才会调用动态库的代码。动态库如果更新了,不需要重新编译程序(前体是接口不变)。

     缺点:发布程序的时候,需要把库提供给用户;动态库程序的加载比较慢。

   

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值