Linux中部分工具学习

来源:互联网 发布:windows nt系统 编辑:程序博客网 时间:2024/05/18 17:00

VIM使用须知:

vim:编辑器                 vim /etc/vimrc:进入vim的配置;

在vim底行模式下,set nu设置(显示)行号

powoff:关机

sync:把数据同步到硬盘里面

(在一般模式下)

u:撤销(一步)           U:撤销(所有操作)

yy:复制                 nyy:复制n行

dd:删除当前行            ndd:删除n行

p:粘贴

x:删除当前字符

nG:跳到行号为n的一行                       G:跳到文件底部


(在底行模式下)

:s/old/new          用new替换首次出现的old

:s/old/new/g       用new替换整行的old

:n,m s/old/new/g    n到m行用new替换所有的old

:%s/old/new/g    替换所有的old


gedit:文本编辑器

若遇到卡机情况用Ctrl+C 中断


Linux开发中常用的工具:

一:Gcc编辑器:

需求:需要将人类用高级编程语言编写的程序“翻译”为计算机可以识别的机器语言;

编译器:将程序翻译为计算机识别的0和1机器语言;

(编译器其实也是一个程序!)

1.预处理:

命令:gcc -E demo.c       (会在终端里输出预处理后的信息)

     gcc -E demo.c -o demo.i     (进行预处理,将处理后的信息保存到demo.i文件) 

预处理阶段处理

头文件:#inlcude <stdio.h>

宏定义:#define MAX 10     (后面无分号)

案件编译


为什么需要预处理?

     因为编译器本身的主要功能是将高级语言编写的源程序转化为机器能够识别的机器语言,所以非核心的功能交给预处理来做。


2.编译:    由编译器将源代码编译为汇编代码

命令:gcc  demo.c  -S /  gcc  -S  demo.c           (生成的是汇编代码.s)


3.汇编:   有汇编器将源代码汇编成中间代码    (生成二进制.o文件)

命令:gcc  -c  demo.c     /       gcc  -c  demo.s    /    gcc   -c   demo.i


4.链接:由汇编器以后的机器代码不能够直接在机器上运行,为了使操作系统能加载可执行文件,文件中必须包含固定格式的信息头,还必须与操作系统提供的启动代码链接起来才能运行。

./demo:          .表示当前目录下       /表示执行


wc -c demo.c   统计demo.c文件中的字节数!

cp -r /bin/tmp/bin     用来复制整个目录的参数!

cp -s .bashrc bashec.cp            建立一个链接文件,文件名为bashrc.cp

nl:查看文件的同时显示行号




静态库与动态库的创建:


静态库创建步骤:

1.编辑待生成的库文件:vim add.c(在这里实现a+b的功能)

2.将库文件编译生成中间代码:gcc  -c  add.c(生成.o文件) 

3.将中间代码生成静态库: ar  rcs  libadd.a  add.o           (lib是前缀,add是要生成的静态库的名字,a表明要生成的是静态库)---------------------------------到此时已创建好静态库

4.编辑调用库函数的源程序   vim demo.c

5.将源文件编译成可执行文件:  gcc  demo.c  -ladd  -L.


动态库创建步骤:

1.编辑待生成的库文件:vim add.c(在这里实现a+b的功能)

2.将库文件编译生成中间代码:gcc  -c  add.c  -fpic(生成.o文件) 

3.将中间代码生成动态库: gcc  add.o  -o  libadd.so  -shared          

---------------------------------到此时已创建好动态库

4.编辑调用库函数的源程序   vim demo.c

5.将源文件编译成可执行文件:  gcc  demo.c  ./libadd.so


总结:动态库与静态库的区别:

1.静态库用.a作为后缀,动态库用.so作为后缀

2.当使用静态库时,链接器找出程序中所需要的库函数,然后将它们拷贝到可执行文件(a.out)里面,调用1次拷贝1次,一旦链接成功,静态库就不需要了,因为可执行文件里面已包含库函数-------------现象:当把libadd.a     mv到其他目录,a.out仍然可以运行,动态库若移除到其他目录则无法运行

3.动态库要比静态库生成的可执行文件小;

4.若在Linux下缺少 -static参数时,默认链接的是动态库




GDB调试工具:

基于什么样的现实需求:gcc  -g  demo.c

         进入到gdb环境下    gdb  ./a.out

gdb里面调试命令:

run:运行程序

break  函数名        /           break  行号    :打断点

info  break: 查看断点数

continue:继续执行,停止在下一个断点处,若无断点则执行到结束

step:单步执行程序(一行一行的执行)【遇到函数时会进入函数内部执行】

next:单步执行程序【遇到函数时不会进入函数内部执行】

delete  断点号:删除断点

quit:退出gdb环境

list:显示源代码         (list  m:从m行开始显示

set  listsize  n:设置显示n行

print  变量名:打印变量的值

print  &i:打印变量i的地址

print  *地址:打印地址里面的值

可设置满足某条件时断点生效      例:break 20 if i==3




makefile工程管理器:

实际工程中,不可能把所有代码放入一个.c文件里面!否则代码臃肿,功能划分不明确,不利于程序员看代码 !

会带来的缺陷:  容易出错            只是修改了某个.c文件,但是还要把其他没修改的.c文件再通过命令编译一遍

因此引入makefile工程管理器

在Makefile文件里会根据类型,功能,模块指定编译规则!指定编译先后顺序,哪些需重新编译!

Makefile带来的好处:1.减少不必要的编译错误  

 2.可以实现自动化编译:只需在终端输入一个make命令,就可以将所有的.c文件,根据makefile文件指定的规则编译生成可执行文件


怎么使用makefile来实现自动化编译?

1.首先要有个makefile 文件

2.在终端输入:make命令就可以生成可执行文件

例     demo:add.o  sub.o  main.o

gcc add.o  sub.o  main.o  -o  demo

rm  *.o:删除后缀为.o的所有文件







原创粉丝点击