linux开发工具学习
一. 编辑器vim
1.vim的常用操作总结
单独总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/82533514
2.vim的简单配置
- 低配版vim
目录/etc/
下面,有一个vimrc
的公共配置文件,对所有的用户都可用。但是我们一般不这样做,为了保证用户的独立性,在每一个用户主目录下,都可以创建自己独有的vim配置文件.vimrc
,如果用户主目录下存在,则直接编辑修改它;如果不存在,则自己创建一个,我们可以在里边对vim
进行各种配置,例如:
"设置语法高亮
syntax on
"显示行号
set nu
上边的.vimrc
的配置可以自行在网上查找,网上有很多牛X的.vimrc
建议看着注释一条一条测试,不要直接复制进去,否则会出现很多问题。
- 高配版vim
要想配置好看的vim,需要选择性安装许多插件才可已完成,推荐看另一篇博客:
https://blog.csdn.net/namecyf/article/details/7787479
vim的配置需要下载很多插件,稍有不慎就会高坏虚拟机,建议大家使用快照功能,方便恢复。
3.除了vim还有哪些好用的编辑器
单独总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/82799723
二.编译器gcc/g++
1.了解编译原理
单独总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/80067803
- 预处理
gcc -E test.c -o test.i
(条件编译、头文件引入、注释删除、宏替换等) - 编译
gcc -S test.i -o test.s
(把源代码装换为汇编代码) - 汇编
gcc -c test.s -o test.o
(把汇编代码转换为机器可识别的二进制指令) - 链接
gcc test.o -o test
(链接器将多个源文件生成的.o文件捆绑在一起,同时链接到程序所需要的函数的函数库,生成一个单一完整的可执行程序)
函数库:
在C语言中,例如printf
函数的定义并不是我们自己写的,而且在头文件stdio.h
中也只有printf
函数的声明,那么它是在那定义的呢?系统把这些函数的实现都放到了libc.so.6(动态库、C标准库)
的库文件中,gcc
时默认的搜索路径为/usr/bin
,也就是链接到libc.so.6
的库函数中了,这也就是链接的作用
2.gcc选项
-E
只进行预处理阶段,不产生任何文件-S
只进行编译阶段-c
只进行汇编阶段-o
将产生的内容放到一个文件中-static
对生成的文件采用静态链接(gcc编译时默认是动态链接)-g
生成调试信息(gcc编译默认是release
版本,要想用gdb
调试,必须加上-g
选项,生成调试信息)-share
尽量使用动态库,生成的文件较小-O0、-O1、-O2、-O3
编译器的四个优化选项,-O0表示没有优化,-O3优化等级最高-w
编译时不生成任何警告信息Wall
编译时生成所有警告信息
3.静态库和动态库
函数库分为两种静态库和动态库:
- 静态库 :静态库文件名的命名方式是
libxxx.a
,库名前加lib
,后缀.a
,“xxx”为静态库名。
链接时间: 静态库的代码是在编译过程
中被载入程序中。
链接方式: 静态库的链接是将整个函数库的所有数据都整合进了目标代码
。这样做优点是在编译后的执行程序不在需要外部的函数库支持,因为所使用的函数都已经被编进去了,可移植性较高
;缺点是如果所使用的静态库发生更新改变,你的程序必须重新编译
。
- 动态库 :动态库的命名方式与静态库类似,前缀相同,为
lib
,后缀变为.so
。所以为libxxx.so
链接时间: 动态库在编译的时候并没有被整合进目标代码,而是当你的程序执行到相关函数时才调用该函数库里的相应函数。
链接方式: 程序执行时由运行时的链接文件加载库。这样做缺点是因为函数库并没有整合进程序,所以程序的运行环境必须提供相应的库,一旦库丢失,程序将奔溃
。优点是动态库的改变并不影响你的程序
,所以 动态函数库升级比较方便。
它们两个还有很明显的不同点:当同一个程序分别使用静态库,动态库两种方式生成两个可执行文件时,静态链接所生成的文件所占用的内存要远远大于动态链接所生成的文件。(因为静态链接是在编译时将所有的函数都编译进了程序。而动态链接是在运行是才调用库里相应函数)
三.调试器gdb
1.调试器的使用(和vs对应)
调试程序对于一个程序员是很重要的,有一句话说一个优秀的程序员%20的时间用在写代码,而%80的时间用于调试代码
,我们在学用gdb调试代码的时候,每一个步骤和vs下调试代码对应起来会有助于我们理解。这里我单独总结于另一边博客:
https://blog.csdn.net/hansionz/article/details/82633439
四.项目自动化构建工具make/makefile
1.makefile的定位
- 在vs中我们如果写多文件的代码,直接在一个工程里创建文件直接写就可以了,那么在linux下,我们怎么写多源文件的一个工程呢,这里就要借助
make/Makefile
它们之间的依赖关系。 make
是一条命令,makefile
是一个文件,两个搭配使用才能完成项目自动化构建。- 会不会写
Makefile
,可以从侧面说明一个人是否具备完成大型工程的能力。
2.怎样写makefile
一个makefile中必须包含两个东西:
- 依赖关系
- 依赖方法
下面我们写一个简单的makefile例子:
hello:hello.c
gcc hello.c -o hello
.PHONY:clean
clean:
rm -f hello
在上边的makefile中:
- 依赖方法是
gcc hello.c -o hello
和rm -f hello
,依赖关系是hello:hello.c(hello的生成要依赖hello.c)
clean
是.PHONY
修饰的一个伪目标,它的特点是总是被执行,它用来清除所有目标文件生成的目标文件,以便于重新编译
五.Linunx下第一个小程序
1.进度条的实现
单独总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/82620225
六.软件包管理器
1.什么是软件包
- linux下怎么安装软件呢?一个办法是下到程序的源代码,进行编译,可以得到可执行程序,但是这样太麻烦了,所有就有人将一些常用软件编译好,做成一个软件包,并且将所有软件包放在一个服务器上,要安装的时候,直接通过包管理器下载下来进行安装。
- 软件包和软件包管理器就是手机上
APP
和应用商店
的关系。
2.yum常用命令
yum list
罗列出所以的软件包sudo yum install xxxx
安装软件sudo yum remove xxxx
卸载软件
注意点:
- yum需要在联网的时候才能工作
- 安装软件时需要向系统目录写入东西,要有root权限才可以。我们可以用sudo提升权限也可以先su切换到root用户在操作
- yum一次只能安装或卸载一个软件
3.yum和rpm的区别
- rmp安装
1.安装别人编译好的软件包
2.rpm即Redhat Package Manager,Redhat的软件包管方式,适用rpm install 命令
3.rpm不仅已经把软件源代码编译成二进制文件,而且对软件包依赖的文件,系统环境等做了统计文件扩展名:rpm
4.还有一种SRPM:没有编译成二进制文件,但是也包含rpm的特性
- yum安装
1.用rpm方式安装软件,如果依赖的软件没有事先安装,软件无法安装成功。为了解决这个问题,推出yum方式。
2.既然依赖的软件没有安装在机器上,那么就先安装依赖文件,再安装我需要安装的软件。
3.因此yum在安装软件同时安装依赖文件。
4.因此需要一个yum源来放依赖的软件源,对比被安装机器上rpm软件库归根到底,yum也是基于rpm的
具体的区别可以看下边这篇博客:
https://blog.csdn.net/u010069176/article/details/50827553