| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Linux环境的基础开发工具(yum、vim、GCC、gdb、make、git)的初步学习与使用 -> 正文阅读 |
|
[开发工具]Linux环境的基础开发工具(yum、vim、GCC、gdb、make、git)的初步学习与使用 |
文章目录1 Linux软件包管理器yum??Linux下安装卸载软件的三种解决方案:
??yum就好像手机上的应用市场( ?? ??yum中使用 ??如果要关键字搜索,可以 ??考虑到架构,可以这样关键字搜索
??之前装过了,就会这样显示: ?? ??卸了以后又能重新安装了: ??可以搜索一下Linux Centos7必装的软件/好玩的命令。 ?? ??这个 ??注意:
2 CentOS 7.6云服务器软件举例I lrzsz——本地文件上传下载软件?? ??它还可以使用指令上传下载文件。 ?? ?? II htop——交互式进程查看器?? ??如果直接安装失败,首先更新安装包: ??然后安装 III GNOME+VNC——Linux服务器的远程桌面系统??如果实在是想要一个GUI桌面,Linux也是有提供开源的桌面的。 ??首先,运行: ??如果要卸载,运行 ??然后我们其实就已经安装好了图形化界面,接下来需要一个工具远程链接我们的服务器以显示图形化界面,我们安装vnc:
??然后通过以下命令启动VNC服务:
??3的意思就是将VNC服务绑定到5903端口,2就是5902。第一次输入的时候被要求设置登录密码,后来就不需要了。 ??如果要修改密码,使用
??如果要关掉
??然后我们去阿里云控制台防火墙中把新增的5903端口放开,这样就可以通过这个端口链接服务器了。 ??然后输入端口号5903,点击确定。 ??接下来需要在我们的电脑上安装VNC Viewer客户端,VNC? Connect consists of VNC? Viewer and VNC? Server下载并安装即可。 ??然后在上面输入 ??然后输入之前的密码就进来了:
??关于这个GUI的使用可以上网搜GNOME对应操作怎么使用。 参考文档: 3 vim?? ?? ??确认vim:直接输入vim,然后会打开一个界面,退出 ?? ?? ??默认打开vim时就是命令模式。 ??命令模式下按 ??然后按 ??有时候不让写, I 命令模式??vim打开文件后,默认处于命令模式。 1 光标相关??可以按小键盘的上下左右移动或使用 ??原因是早些年的键盘没有上下左右,使用 ??光标位置锚点: ?? ?? 2 文本操作??复制: ?? ??撤销: ?? ?? ??粘贴: ?? ??删除: ?? ??剪切: ?? ??字母大小写切换: ?? ?? ?? II 插入模式??命令模式下使用 ??使用↑ ↓ ← →移动光标进行对应位置插入删除,和普通文本编辑器一样,不过能用命令模式做的删除复制等还是用命令模式做比较好,因为vim不支持鼠标,你用插入模式会很慢。 III 底行模式??命令模式下输入 1 行号?? 2 多个文件分屏??进入底行模式后输入 ??当然还可以继续分屏。 ??底行模式 ?? ??这样就可以利用命令模式在不同文件之间剪切或复制粘贴: ??底行模式下输入 IV vim的配置??vim的配置修改后,只会对自己用户的vim进行改变,root也不会例外。 ??首先在用户的工作目录下创建一个 ?自己普通用户vim的基础配置都会写在 ??打开后默认带了行号: ??百度一下vim常见配置选项就可以查到很多vim的配置选项。 ??root用户的vim配置在/root目录下的 ??由于本人的主力语言是C/C++,所以直接使用gitee上的 ??这个配置有缩进、有自动补全,非常好用。 ??设置一下这三个缩进为4可以把缩进弄得和vs一样,非常舒服。 ??vim学习参考资料:Vim从入门到牛逼 ??这里头的东西还是很实用的,比如里头有有关临时文件的东西: ??使用vim配置信任组:切换root用户,然后使用 4 Linux上的编译器—gcc/g++??GCC是GNU计划中的开源编译器部分,支持多种语言的编译,这里主要介绍本来就在C语言学习中介绍过的C/C++有关的编译器gcc/g++的编译选项。 ??如果直接 I -E
??如果不指定生成什么文件 会把预处理后的文件直接打印到屏幕上。 ??加上 ??发现头文件展开了,并且完成了宏替换 ??预处理的行为就是把注释去掉,头文件展开,宏替换,条件编译等等。 II -S
??汇编语言计算机也不能直接执行,需要汇编器从汇编语言搞成二进制。 III -c?? ??汇编形成的机器码文件 ??下面的测试表明就算加上了可执行权限也无法执行。 ??这里不能执行是因为我们用到了 IV 链接??这步链接通常不需要加上任何选项,直接写 V -o??如果不想一步一步的进行翻译的过程,可以 ??记忆技巧 VI 优化选项
VII 为什么C语言程序的“翻译”是这个过程??最早的时候,编程的只能直接写二进制机器码,写二进制代码的过程就是“打孔编程“ ??由于效率太低了,因此诞生了一门称为汇编语言的语言。 ??汇编语言的主要主体是助记符,因为人类不太好记忆二进制符号,但是记忆助记符相对容易一些,并且同时诞生了编译器,将汇编语言编译成二进制机器码。 ??后来发现汇编语言开发效率还是太低了,因此贝尔实验室开发了C语言。 ??那么开发过程中,是直接把C语言编译成机器语言还是先编译成汇编语言呢? ??显然是应该先编译成汇编语言,首先比起直接编译成机器码,编译成汇编语言相对更加简单;另外,先编译成汇编可以兼容汇编的生态。 ??C语言中有很多需要被提前处理而不需要汇编去处理的过程,如注释等,因此有了预处理阶段。 ??为什么有链接过程呢?因为链接可以使得大家同时开发然后链接到一起共同形成程序,或直接链接前人的库,可以提高开发效率。 ??后来有了面向对象的语言后,为了提高跨平台性,就有了很多不是上述类型的语言,语言运行在一个虚拟机软件上,跨平台性较好。 5 初识静态链接和动态链接?? ?? ??Linux中的静态库 ??总结:不管是静态库还是动态库,都和程序成功运行有关,链接的作用就是把自己写的C程序和语言或第三方提供的库关联起来。 ??那么什么是静态链接,什么是动态链接呢? ??所谓的动态链接的含义就是程序获得链接的第三方库的位置后,然后在我们运行到对应库函数后,会直接去第三方库里找这个函数的实现,执行对应函数后再回到我们本来写的程序继续执行,这就是动态链接的直观理解。 ??所谓的静态链接就是直接把库中的有关代码拷贝到我们的可执行程序中,这就是一种静态链接。 ??所以静态链接后程序就不再需要对应的库了,因为库中的代码已经被拷贝在可执行程序中了。 ?? ??如果需要静态链接,需要加上 ??出现了这个报错则说明云服务器未安装C标准库的静态库: ??安装C标准库的静态库的方法如下:
??然后就能静态链接成功了!链接成功后,发现确实大小有区别。 ??查看对应的静态库: ??安装C++标准库的静态库的方法如下:
??发现C++的标准库大很多。 ??g++编译cpp,用法和gcc基本一样。 ??选项与gcc的选项都相同。 6 Linux上的调试器——gdb的使用I 启动gdb?? ??进入gdb后,我们加上 ??这是因为如果一个程序是可以被调试的,那么该程序的二进制文件一定加入了一些debug信息,如果不需要调试,则该程序的二进制文件就不加debug信息。 ??这就对应debug版本和release版本。 ??在 ??如果要生成可调式的 ??首先观察到可执行文件变大了,通过 ?? ??进入 II l 行号 gdb中查看代码??我们先学习 ?? III b 行号 加断点?? ?? ?? IV s(逐语句调试)和n(逐过程调试)?? ??按vs的流程,接下来应该需要了解的是逐语句调试F11和逐过程调试F10. ??逐语句调试: ??逐过程调试: V 监视有关??常显示变量: ?? ?? VI 程序调试起来后的直接运行finish continue until?? ?? ?? ??如果一个程序出现了段错误,第一种方法是进入每个函数,然后用 ??然后我们再用 VII 删除断点和使断点无效?? ?? ?? VIII 其他?? ?? ?? 7 Linux项目自动化构建工具—make和MakefileI 什么是make和Makefile??make是一条命令,Makefile是一个文件。 ??make和Makefile主要来处理文件之间的依赖关系。 ??在VS中我们VS会帮我们维护好文件之间的依赖关系,Linux下,我们需要写Makefile来确定文件之间的依赖关系。 ??Makefile中主要构建了依赖关系和依赖方法。 ??当项目的文件很多的时候,如果直接使用gcc编译会非常麻烦,如果我们写好Makefile文件,可以直接快速的编译。 ??什么叫依赖关系和依赖方法呢?假如您是一个大学生,到了月底您给您母亲打电话说:“妈,我是你儿子“,这个就是表述了一个依赖关系,你依赖于你妈妈,但是这个依赖关系并没有什么用,你妈妈并不知道你打这个电话表明依赖关系干嘛,如果说:”妈,我是你儿子,到月底了,打钱“,打钱就是一个依赖方法。 ??这也表明了依赖关系和依赖方法必须成对出现才有用。 II 一个简单的Makefile?? ??仅表明依赖关系是没用的,我们还得交待依赖方法: ??在第二行先以tab健开头,然后加上 ??然后直接执行make命令即可,也可以 ?? ??VS中还有自动清理解决方案,在 ??我们的普通目标,在生成后,如果检查到已经是最新的了,系统不会允许我们更新: ??但是 III 一个稍微复杂一点的Makefile??我们维护一个项目,通过一个源文件 ??我们最终的目标是 ??执行 ??执行清理项目文件: ??一个管理堆的oj的debug版本和release版本的代码: Makefile中的常见正则表达式符号: 用 8 Linux上的第一个小程序—进度条I 回车和换行与缓冲区??回车和换行其实是一个分开的概念: ??回车的含义是回到本行的起始位置,换行的含义是列位置不变,新起一行。 ??下面一个代码,先打印一个字符串,然后等待5s: ??但是如果我们的字符串里头没有’\n’就会变成先等待五秒然后输出这个字符串: ??我们知道根据c语言循环语句的特性,sleep一定是比printf运行晚的,也就是说printf肯定已经执行,但是数据没有立刻刷新到显示器上,所以结论就是没有’\n’,字符串会暂时保存起来,而不会直接刷新到显示器上。 ??这个保存起来的区域就是用户C语言级别的缓冲区,显示器设备的刷新策略就是行刷新,即缓冲区遇到\n才刷新。 ??那我们如果就是想直接刷新呢,我们可以用 ??C程序默认会打开三个输入输出流: ??因为我们写程序的目的就是读取数据进行计算与显示,所以C程序默认打开 所以加上 ??如果要对第一个位置的数不停的刷新覆盖,可以打印一个数,然后回车回到开头第一个位置而不换行,即我们不换行而只想回车,反复打印数即可,在C语言中, ??如果想完成10到0的倒计时,由于10会占两个字符,所以我们需要给它预留空间: II 进度条的实现??所以进度条也可以打印1个#,然后回车打印两个#,重复。。。如果想打印两个#,只要让h后一个字符也变成#,然后回车但不换行输出h即可 ??那如果想形成以下模样呢? ??首先考虑用一个[]来装载#,但是因为右边还要有一个方块来承载数字,因为右边同时还有一个方框来承载一个数字,所以我们需要给100个#预留空间,可以用C语言中的格式化字符串中的 ??我们还可以实现一个光标来表明当前进度条正在加载,可以利用一个组成为 ??另外,我们还可以通过printf调整字体的配色方案,百度printf的配色方案即可,这里总结了xiao zhou的博客: ??我们修改后的输出样式如图:
9 命令行git的使用I 下载git??使用 II 在gitee创建仓库??然后在 创建好后修改代码仓库为开源的 III 本地git操作??克隆到本地: ??记得要把提交邮箱改为公开,或者使用在这个网址中对应的加密邮箱地址。 ??然后和之前的博客中介绍git的图形化界面使用一样的是提交所用的add commit push三板斧
??一般
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:47:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |