Linux开发工具

1. 安装软件(yum)

centos 7中

  • 源码安装
  • rpm包安装
  • yum安装:1.不用编译源码 2.不用解决软件的依赖关系
查找ls软件:yum list | grep sl
安装sl软件:sudo yum install sl
卸载sl软件:sudo yum remove sl

sl是一个可以跑火车头的软件。

大家现在只需要知道用yum安装软件可以很简单就行了。

我们要安装别人的软件:

  1. 需要别人先把代码编译成为可执行程序
  2. 需要有人将编好的软件放在用户能下载的地方(官网,应用软件市场)

在Linux中也是一样的!yum还会帮你解决依赖关系,这里不展开讲。

image-20220821134715504

注意:

  1. 不是所有同学的Linux上面的yum源都是国内的链接
  2. 如果不是国内的或者安装软件特别慢,建议更新yum源

2. vim工具

vim是一个编辑器,只能用来写代码,但是它功能强大,是一个多模式的编辑器。

为什么要学vim?

有时候需要我们在生成环境下,快速的定位问题,甚至需要快速的修改代码。

2.1 vim的使用

在工作目录下创建好要编辑的文件,**vim [文件名]**就能进入编辑了,gcc [文件名]编译,./a.out运行

三种模式:正常模式、插入模式、底行模式

image-20220821141448606

2.2 命令模式下的文本批量化操作

image-20220821141804556

3. Linux编译器-gcc/g++使用

3.1. 背景知识

image-20220821145337810

3.2 gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

3.3 预处理(进行宏替换)

gcc –E test.c –o hello.i

-E:从现在开始给我进行程序的翻译,当预处理完成就停下来。

-o:把程序预处理的结果写入目标文件hello.i

在命令模式输入:vs hello.i就能进行对比观察,Ctrl+ww可以让光标在两个文件之间进行转换

image-20220821150700514

代码预处理完还是C语言,只不过是一份干净的C语言。

3.4 编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言

gcc -S test.i -o test.s

-s:从现在开始进行程序的翻译,当我们编译完成之后就停下来。

3.5 汇编(生成机器可识别代码)

汇编阶段是把编译阶段生成的“.s”文件转成可重定位二进制文件.o/.obj

gcc -c test.s -o test.o

-c:从现在开始进行程序的翻译,当我们汇编结束后就停下来。

注意:所有包含头文件的操作,本质是因为想使用头文件所声明的方法!如果我们不需要用,头文件就不是必须的。

3.6 连接(生成可执行文件或库文件)

我们从头到尾都只编译了自己的代码,但是我们代码中所需要的printf在哪里?我的代码中使用了printf,如何和目标printf的实现产生关联(链接)?

代码中所需要的printf在C标准库:/lib64/libc-2.17.so还需要进行链接

gcc test.o -o mytest

这行命令隐含的就是链接我们自己的程序和库,形成可执行程序!

./mytest       //运行程序

ldd命令可以参考程序所依赖的库和链接方式

ldd mytest

3.7 库的概念

头文件:给我们提供了可以使用的方法,所有的开发环境具有语法提示,本质是通过头文件帮我们搜索的!

库文件:给我们提供了可以使用的方法的实现,以供链接,形成我们自己的可执行程序!

感性认识:

动态库:Linux(.so) windows(.dll) 动态链接

静态库:Linux(.a) windows(.lib) 静态链接

动态链接:

优点:大家共享一个库,可以节省资源

缺点:一旦缺失,会导致几乎所有程序失效

静态链接:将库中的相关代码直接拷贝到自己的可执行程序中!

优点:不依赖任何库,程序可以独立执行

缺点:浪费资源

默认情况下,形成的可执行程序是动态链接的,可以用 file [可执行程序]查看

可以通过以下方式改为静态链接

gcc test.c -o mytest2 -static

大小是动态链接的约100倍!

4. gdb

进入gdb调试器:

gdb [可执行程序]

注意:默认生成的可执行程序无法调试,因为默认的可执行程序是release模式!

image-20220821162805093

我们需要在编译的时候加上选项形成debug模式的可执行程序:

gcc hello.c -o hello_g -std=c99 -g
b 行号:打断点
d 断点编号:取消断点
info b:查看断点信息
l 行号:显示代码  l 0从0开始显示一直按回车可以显示完
s:step,逐语句(进入函数)
n:next,逐过程
display 变量名 && undisplay 变量名:常显示或者取消常显示
until 行号:跳转到指定行
r:运行程序
c:从一个断点跳转(运行)到另一个断点
finish:执行完成一个函数就停下来

5. make/makefile

5.1 背景

项目构建

项目结构:

  1. 多文件.h, .c, .cpp,先编译哪一个程序?
  2. 链接需要哪些库?
  3. 库和头文件在哪里找?
  4. 整个项目结构该如何,为什么?

5.2 概念

make是一个命令,makefile是一个文件。

Makefile(首字母大小写无所谓):在当前路径下的一个普通文件。

  1. 依赖关系:mytest -> mytest.c
  2. 依赖方法:gcc mytest.c -o mytest

目的:形成可执行程序

写一个最简单的Makefile:

image-20220821171412925

如果我想运行程序直接敲make命令就行了

如果我想清理程序用make clean命令。类似VS的重新生成解决方案,清理脏值。

.PHONY可以看成是Makefile中的一个关键字,clean被.PHONY修饰时表明:总是被执行!:无论目标文件是否新旧,照样直接执行依赖关系!

那么问题来了Makefile是如何识别我的exe/bin是新的还是旧的呢?

stat命令可以查看文件被打开、修改属性或者修改内容的时间:access是访问时间由于操作频繁,一般不会更新。change是属性被修改的时间,modify是内容被修改的时间。改属性不会影响内容,但是改内容可能会影响属性(size).

image-20220822102139465

根据对比源文件和可执行程序的最近修改时间,评估要不要重新生成!

clean是一个伪目标,也有依赖关系(空)和依赖方法。像mytest就是一个正常目标,依赖关系是mytest.c。

注意:依赖方法必须以tab键开头!

Makefile默认只会形成第一个目标文件,执行该依赖关系的依赖方法。

5.3 多文件的Makefile

首先我建一个multi_make的目录来演示,分别创建test.h、test.c、main.c的文件。

image-20220822121717525

如果想要生成可执行程序,最简单的方法就是:直接用gcc将main.c test.c生成可执行程序

gcc -o hello main.c test.c

image-20220822121820738

但是我们今天不这样做,我们采用Makefile的方法

image-20220822134503147

效果:

image-20220822134551368

6. Linux第一个小程序(进度条)

6.1 缓冲区的理解

缓冲区就是一段内存空间:

  1. 立马将内存中的空间显示出来,刷新策略:行刷新。
  2. 不想用\n,就像让你的数据立马刷新!这时就可以用fflush(stdout);

image-20220822140341417

6.2 回车 vs 换行

回车:将光标回到当前行的最开始

换行:在光标所在位置新起一行(光标列的位置不变)

回车是\r,\n是回车+换行

6.3 倒计时程序

写一个数字,光标回到最开始新数字覆盖旧数字

image-20220822141907220

6.4 进度条

image-20220822151731258

7. git

image-20220822155857416

.gitignore相当于黑名单,可以在这个黑名单文件内编辑自己不想上传的文件,通过添加文件后缀。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuucho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值