【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作
目录
- yum - 软件包管理器
- 快速认识yum
- 快速使用yum
- yum搜索
- yum安装
- yum卸载
- yum的周边 - yum的整个生态问题
- vim
- 快速介绍vim
- vim的模式
- 命令模式
- 插入模式
- 低行模式
- 常见模式 -- 命令、低行
- 命令模式 -- 光标的移动
- 命令模式 -- 复制粘贴、剪贴、删除
- 命令模式 -- 小写/大写
- 替换模式
- 命令模式 -- 删除
- 命令模式 -- 查找
- 低行模式
- 多窗口的光标移动
- 批量化注释/去注释
- 配置问题
- 解决sudo的白名单
- gcc/g++
- 程序的翻译过程及gcc选项
- 预处理
- 条件编译
- 编译
- 汇编
- 链接
- g++
- 动静态库的理解 -- 链接
- 动态链接、动态库
- 静态链接、静态库
- make/makefile -- 项目自动化构建
- 快速使用
- 解释依赖关系和依赖方法
- 清理项目
- make的小知识点
- 认识的文件的时间
- 补充makefile的语法
- &@ 、 &^
- makefile里面的全局变量
- 关于makefile/make的语法推导
- 第一个小程序 -- 进度条
- 预备的两个小知识
- 缓冲区
- 回车与换行
- 入门版的进度条
- 升级版进度条 -- 设计上
yum - 软件包管理器
快速认识yum
Linux中我们也要进行工具/指令/程序,安装、检查、卸载等,需要yum的软件
安装软件的方式:
1、源代码安装 – 交叉编译的工作
2、rpm包直接安装
3、yum / apt-get
yum是我们Linux上的一条指令,搜索、下载、安装对应的软件
yum相当于是Linux的应用商店!
快速使用yum
yum list //列举yum可以安装的东西
yum搜索
yum list | grep lrzsz
yum安装
yum是先下载再安装
yum install 文件名
yum -y install 文件名
yum卸载
yum remove 文件名
-y:对于一些询问表示yes
yum -y remove 文件名
yum的周边 - yum的整个生态问题
1、yum如何得知目标服务器的地址和下载链接?
配置文件里面会记录下载的地址
ls /etc/yum.repos.d/
这里面对应的都是yum的本地仓库名
其中CentOS-Base.repo就是yum源,可以更改yum源
扩展软件源
yum install -y epel-release
2、云服务器谁提供的?
既得利益者提供的
3、谁提供软件?
大家愿意写的人开发的
vim
写代码:vim
编代码:gcc/g++
调代码:gdb
维护项目结构、自动化编译:make/makefile
快速介绍vim
vim是一款多模式的编辑器,vim里面还有很多的子命令,来进行代码的编写操作
1、进入vim后一般没法写入,需要模式切换,i – insert插入模式
2、写完后按esc退出插入模式 -> shift+;(也就是:)进入低行模式 -> wq(保存并退出)-> 回车
3、gcc编译,运行
vim的模式
命令模式
插入模式 -> 命令模式:esc
插入模式
命令模式 -> 插入模式 :i/a/o
低行模式
命令模式 -> 低行模式:shift + ;(也就是:)
低行模式 -> 命令模式:esc
常见模式 – 命令、低行
命令模式 – 光标的移动
将光标定位到最右侧结尾处:shift+4($)
将光标定位到最左侧开头处:shift+6(^)
将光标定位到文本的最后一行:shift+g(G)
将光标定位到文本的最开始一行:gg
将光标定位到特定一行,例如第五行:5 shift g
h:左
j:下
k:上
l:右
w:以单词为单位向后移动
b:以单词为单位向前移动
命令模式 – 复制粘贴、剪贴、删除
n+yy:复制所在行/多行
n+p:在下一行进行粘贴一次/n次
u:撤销编辑操作,undo
ctrl+r:对刚刚的撤销进行撤销
n+dd:删除/剪切当前行/多行
dd、p:剪切
命令模式 – 小写/大写
shift+`(~):大小写快速切换
替换模式
n+r:替换当前光标所在字符/n个字符
shift+r:替换模式
命令模式 – 删除
n+x:删除光标所在字符/后面n个字符(往后删)
n+shift+x:往前删
命令模式 – 查找
shift+3(#):高亮要查找的函数名
n:下一个查找到的函数名/字符串
低行模式
wq:报存并退出
w!:强制写
q!:强制退出
wq!:强制保存并退出
!指令:可以在低行模式执行shell指令
/搜索的内容:
?搜索的内容
vs 文件名:会形成一个并在旁边对比
set nu:调出行号
set nonu:取消行号
vim test.c 行号:光标直接定位到指定行
shift+zz:保存并退出vim(不建议用)
光标在哪个窗口就是在编辑哪个窗口
多窗口的光标移动
ctrl+ww
批量化注释/去注释
批量化注释
1、ctrl+v:进入VISUAL BLOCK模式
2、按hjkl进行区域选择
3、shift+i:从VISUAL BLOCK模式切换成插入模式
4、//
5、按esc
批量化去注释
1、ctrl+v:进入VISUAL BLOCK模式
2、hjkl选择区域
3、按d
配置问题
1、进入用户家目录下
2、创建.vimrc
3、vim .vimrc进行配置
set nu //显示行号
set cursorline //突出显示当前行
hi Cursorline cterm=bold ctermbg=black ctermfg=green guibg=green //粗体显示选中行,用黑色框,字体标绿
set cursorcolum //设置列高亮
set autoindent //自动缩进
set softtabstop=4 //统一缩进为4
set tabstop=4 //tab缩进为4
set cindent
set shiftwidth=4
set smartindent //提供自动缩进
syntax on //语法高亮 inoremap ' ''<ESC>i //自动补齐
inoremap " ""<ESC>i
inoremap < <><ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR>}<ESC>O
简便配置方法:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
一定在普通账号下运行
解决sudo的白名单
得有root账户改
vim /etc/sudoers
gcc/g++
程序的翻译过程及gcc选项
编译C语言是默认是a.out,如果想要指定名称的话,下列两种方法。
默认形成
指定名称
凡是和 -o 紧邻的是形成的可执行程序
1 #include <stdio.h>2 #define M 1003 4 int main()5 {6 printf("hello linux\n");7 printf("hello linux: %d\n", M); 8 //printf("hello linux\n");9 //printf("hello linux\n");10 //printf("hello linux\n");11 //printf("hello linux\n");12 //printf("hello linux\n");13 14 return 0;15 }
预处理
头文件展开:本质在预处理的时候,将头文件内容拷贝至源文件
去注释
宏替换
条件编译
gcc -E test.c -o test.i
-E : 从现在开始进行程序的翻译过程,预处理做完的时候就停下来
上面多出的八百多行代码都是头文件展开
条件编译
条件编译的本质:对代码进行裁剪
1 #include <stdio.h>2 #define VERSION1 13 // #define VERSION2 24 5 int main()6 {7 printf("hello linux\n");8 #ifdef VERSION1 9 printf("hello version1.0\n");10 #elif VERSION2 11 printf("hello version2.0\n");12 #else13 printf("hello free version\n");14 #endif15 //printf("hello linux\n");16 //printf("hello linux\n");17 //printf("hello linux\n");18 //printf("hello linux\n");19 //printf("hello linux\n");20 21 return 0;22 }
将test.c里面的两个宏都注释掉,可以在gcc指令里面添加宏 -D
gcc test.c -o test.exe -D VERSION1=1
gcc test.c -o test.exe -DVERSION1=1
//可以连着也可也不连着
应用场景
1、对于软件的专业版与社区版,维护一份代码,可以用条件编译对里面的功能进行裁剪
2、头文件定义上,防止头文件被重复包含
#ifndef __CODE_H__
#define __CODE_H__
// XXXX
#endif
编译
C -> 汇编
从test.c开始也许, -S 从现在开始进行语言的翻译,当编译工作完成就停止
gcc -S test.i -o test.s
形成汇编语言
汇编
汇编 -> 二进制,可重定位目标二进制文件(不能执行)
test.o : 可重定位目标二进制文件
gcc -c test.s -o test.o
vim是文本编辑器,所有对于二进制展现出来是乱码
链接
将可执行程序与库关联起来
gcc -o test test.o
ldd 命令可以查询一个可执行文件所依赖的库
其中/lib64/libc.so.6就是所用的C语言的库
g++
1、编译失败问题
输入下列指令
sudo yum -y install gcc+ gcc-c++
2、编译形成指定名称的可执行程序
C语言也可以用g++编译,g++的选项与gcc一样
g++ test.c -o mybincpp
g++ -o mybincpp test.c
动静态库的理解 – 链接
我们所写的代码都是代码+调用的库
库让我们写一份代码不用从零开始
都是文件
下面这个是个动态库
去掉lib(所有库都以这个开头),去掉.so.6,所有这个库是个c库
动态库 -> 动态链接
静态库 -> 静态链接
动态库
优点:节省资源,不会出现太多的重复代码 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)
缺点:对库的依赖性比较强,一旦库丢失,所以使用这个库的程序都无法运行
静态库
优点:不依赖库,同类型平台中都可以直接运行使用
缺点:可执行程序体积比较大,比较浪费资源 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)
动态链接、动态库
被多个使用者共享使用,一旦缺失,所有程序都不可以运行了!!
我们调用哪个库,只是在代码中指明库的地址
静态链接、静态库
代码中我们用到哪个库,直接硬拷过来,成为静态链接
ldd
ldd可以查看一个文件库的依赖情况
file
动态库又称为共享库
形成用静态库的可执行程序
注意:一般程序是不会给安装静态库de,需要用yum进行安装
ld是连接器
sudo yum install -y glibc-static libstdc++-static
make/makefile – 项目自动化构建
在linux中是使用命令行的,如果有十几个源文件,难道每一个都要用gcc/g++去进行预处理、编译、汇编等操作吗?
make是一个命令
makefile是一个文件(保存的依赖关系和依赖方法)
快速使用
1、创建Makefile/makefile文件
touch Makefile
touch makefile
2、vim打开这个文件
第一行:依赖关系
第二行:依赖方法
解释依赖关系和依赖方法
依赖关系:我为什么要帮你?
依赖方法:我怎么帮你?
清理项目
clean后面为空,需要依赖关系,但依赖关系为空
make的小知识点
1、Makefile和make形成目标文件的时候,默认是从上到下扫描makefle的文件,默认形成的第一个目标文件
2、默认只形成一个
3、 make和makefile怎么知道可执行程序是比较新的呢??这个是通过对比时间比出来的,只要可执行程序的最近修改时间比所有源文件的最近修改时间新,说明它就是最新的!
认识的文件的时间
1、Modify:对文件内容做修改时
2、Change:对文件属性做修改时
3、Accesss:文件访问时间,只有对文件内容进行打印查看的时候才会改变
1、当对文件内容进行修改的时候,文件的大小也会改变,连带着文件的属性也变了
2、对权限进行修改的时候不会改变内容,因此只有Change改变了
3、
Access并不是每一次都会改变:最初设计的时候,每次查看Access都会改变更新。相比于修改内容和属性,查看文件是十分频繁的,这导致Access会频繁更新,进而造成资源浪费。-- 当短时间内频繁查看时,Access只会在第一次时修改,之后不再修改
4、当不想更改文件内容,而想让Modify更新
可以用touch,当创建的文件存在时,它只会刷新文件的时间。
5、不用touch就make
如果每一次make都要touch一下太麻烦了 — PHONY
修饰mybin目标文件,成为一个伪目标
但我们一般是给clean
.PHONY:clean
补充makefile的语法
&@ 、 &^
&@代表mybin
$^代表mytest.c
makefile里面的全局变量
关于makefile/make的语法推导
第一个小程序 – 进度条
写源代码之前,先把makefile写通
预备的两个小知识
缓冲区
回车与换行
入门版的进度条
升级版进度条 – 设计上
相关文章:

【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作
目录 yum - 软件包管理器快速认识yum快速使用yumyum搜索yum安装yum卸载 yum的周边 - yum的整个生态问题 vim快速介绍vimvim的模式命令模式插入模式低行模式 常见模式 -- 命令、低行命令模式 -- 光标的移动命令模式 -- 复制粘贴、剪贴、删除命令模式 -- 小写/大写替换模式命令模…...

Redis:ClassCastException【bug】
Redis:ClassCastException【bug】 前言版权Redis:ClassCastException【bug】错误产生相关资源控制器:UserController("/user")配置:RedisConfiguration实体类:User数据表:User 解决 最后 前言 2…...
JSON 配置文件
JSON 配置文件的作用 JSON 是一种数据格式,在实际开发中, JSON 总是以配置文件的形式出现。小程序项目中也不例外:通过不同的 .json 配置文件,可以对小程序项目进行不同级别的配置。 小程序项目中有 4 种 json 配置文件࿰…...

由浅到深认识Java语言(6):控制流程语句
该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...

lv17 安防监控项目实战 3
代码目录 框架 our_storage 编译最终生成的目标文件obj 编译生成中间的.o文件 data_global.c 公共资源定义(使用在外extern即可)定义了锁定义了条件变量消息队列id、共享内存id、信号量id及key值发送短信、接收短信的号码向消息队列发送消息的函数&am…...
文本处理基本方法
目录 分词 jieba 词性标注 😆😆😆感谢大家观看😆😆😆 分词 在中文文本中,由于词与词之间没有明显的界限符,如英文中的空格,因此分词是中文自然语言处理的一个基础且…...

Java面试题(Spring篇)
💟💟前言 友友们大家好,我是你们的小王同学😗😗 今天给大家打来的是 Java面试题(Spring篇) 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞👍 收藏⭐ 评论📄 小王的主页…...

操作系统:malloc与堆区内存管理
malloc是函数而不是系统调用,他的底层是同调调用brk和mmap这两个系统调用实现功能的,具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值(一般是128kb) 注意申请的空间只有使用才会触发缺页中断映射到物理内存 不理解的话先…...

javaSwing推箱子游戏
一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类…...

JAVA多线程之JMM
文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.3 有序性 4. 指令重排5. JMM 与 happens-before5.1 happens-before关系定义5.2 happens-before 关系 在继续学习JUC之前,我们现在这里介绍一下Java…...

Windows10 专业版 系统激活
Windows10 专业版 系统激活 参考: Windows10系统激活技巧 第一步:在电脑桌面,新建一个文本文档 第二步:打开文本文档,输入以下代码后,直接保存关闭文档 slmgr/skms kms.03k.org slmgr/ato 第三步࿱…...
C#使用LINQ和EF Core
在实际应用中,您可以使用 LINQ 查询 EF Core 来执行各种数据库操作。通过 LINQ,您可以轻松地过滤、排序、分组和连接数据。 要使用LINQ查询EF Core中的数据,您可以按照以下步骤进行操作: 首先,确保您已经安装了 Entit…...

数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署
简介 随着数字人物概念的兴起和生成技术的不断发展,将照片中的人物与音频输入进行同步变得越来越容易。然而,目前仍存在一些问题,比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题,来自西安…...

HTML5语法总结
文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并…...

在github下载的神经网络项目,如何运行?
github网页上可获取的信息 在github上面,有一个requirements.txt文件,该文件说明了项目要求的python解释器的模块。 - 此外,还有一个README.md文件,用来说明项目的运行环境以及其他的信息。例如python解释器的版本是3.7、PyTorc…...

spring boot学习第十四篇:使用AOP编程
一、基本介绍 1,什么是 AOP (1)AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 (2)利用 AOP…...

凯特信安云签解决方案
联合解决方案 凯特信安基于《电子签名法》设计“云签服务方案”,应用人脸识别、电子签章签名云服务等技术,支持多个自然人、多个企业等签名,满足各种移动终端签署的应用场景。面向不动产登记、工改系统等社会公众服务系统,针对自然…...

【xr806开发板使用】连接wifi例程实现
##开发环境 win10 WSL ##1、环境配置 参考:https://aijishu.com/a/1060000000287513 首先下载安装wsl 和ubuntu https://docs.microsoft.com/zh-cn/windows/wsl/install (1)安装repo: 创建repo安装目录: mkdir ~/…...

停车管理系统asp.net+sqlserver
停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库, 功能模块: 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…...

新增多项功能,龙讯旷腾开源机器学习力场PWMLFF 2024.3版本上线
人工智能与传统计算机模拟结合是当今科学计算的一大趋势,机器学习力场作为其中的一个重要方向,能够显著提升分子动力学模拟的精度和效率。PWMLFF是一套由龙讯旷腾团队开发,在 GNU 许可下的开源软件包,用于快速生成媲美从头算分子动力学(AIMD&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...