Linux开发工具

开发工具

一、yum

1.1安装方式

1.源代码安装,较为复杂不建议;

2.rpm安装,此方式有许多的安装依赖,不见使用;

3.yum安装,解决了安装源,安装版本和安装依赖的问题;

1.2Linux的软件生态

​ 像手机,iPad,笔记本等都有一个类似软件管家的软件,这个客户端软件内置了服务器ip和port,可以直接找到各个商家上线的软件产品;好处就是不需要自己去网站上下载。

​ 公司为了盈利,个人为了提高知名度,会不断地上传软件产品,支持人们下载使用。

​ 而对于centos系列Linux,yum就相当于软件管家,支持去下载各种软件,ubantu使用的是apt-get;

1.3开源是一种商业战略

1.3.1Linux的生态

市场上存在着多种商业版本的Linux,对于使用者要进行操作系统的选型,评判标准如下:

​ 1.获取来源是否足够多,足够的官方;

​ 2.行业内共识是否比较好,比较稳定;

​ 3.是否有健全的社区,社区是否足够活跃,社区里面暴露了许多问题,同时有解决方案;

​ 4.是否有提供成熟的开发文档,各种实践场景;

​ 5.是否有良好的软件生态;

​ 开源的优势是一个人维护大型项目,不如多个人来维护,同时开源有利于形成良好的Linux生态,有利于快速占据市场;

1.4开源产生依赖

​ 操作系统的设计者和推动者要共同维护Linux的生态。

​ 推动者如:顶尖的工程师或者黑客,为了实现价值提高知名度,维护软件生态;

​ 由于Linux开源免费,所以很多互联网公司主要使用Linux并且会产生使用依赖。使用者们的目的为了产生企业级软件,所以购买Linux服务器,鼓励工程师和黑客们开发服务。开源免费注定资金不足,难以维持生态,这时候使用者们就会以提供钱或者设备的捐赠之类的方式维护其生态。

1.5yum使用

​ yum的使用必须联网,可以使用ping指令进行验证。

ping www.baidu.com
yum list
#列举一下所有软件包,但是由于很多需要搭配grep过滤出来需要的
sudo yum install -y 软件包名
#需要注意的是普通用户安装软件需要提权
sudo yum remove -y 软件包名
#进行软件的卸载
1.5.1rz/sz软件的安装和使用
sudo yum install -y lrzsz
rz
#将文件从Windows传到Linux上
sz 文件名
#将文件发送到Windows
1.5.2yum源

​ yum内置了app下载链接,即yum源。

​ Base指的是官方yum源,epel指的是扩展yum源。

​ yum源存放在/etc/yum.repos.d这个目录下。

sudo yum install -y eple-release
#安装扩展yum源

二、vim编辑器

​ vim是一种多模式编辑器,常见的是三种模式。以下是三种模式及切换方式。在底行模式下,:!wq。!表示强制执行,w表示写入保存,q表示退出。

在这里插入图片描述

命令模式

​ 使用n可以进行性n行操作;

​ 光标定位:

​ gg:定位光标到文本起始行开始的位置;

​ G:定位光标到文本最后一行的开头位置;

​ ng:定位到n行开头;

​ $:光标定位到当前行结尾;(锚点)

​ ^:光标定位到当前行开头;(锚点)

​ w:光标向右移动;

​ b:光标向左移动;

​ hjkl:分别对应光标向左下上右移动;

​ 复制:

​ yy:复制光标所在行的内容;

​ nyy:复制光标开始n行的内容;

​ 粘贴:

​ p:将拷贝内容粘贴到光标的下一行;

​ np:将n份拷贝内容粘贴到光标的下一行;

​ 撤销:

​ u:撤销上次操作;

​ ctrl+r:反撤销;

​ 剪切:

​ dd:剪切光标所在行内容;

​ ndd:剪切光标所在行开始n行的内容;

​ 其他:

​ shift+~:快速大小写转换;

​ nr:将光标当前位置的往后n个字符替换;

​ nx:将光标当前位置的往后n个字符删除;

批量化替换模式

​ 使用R进入,按两下insert键;

插入模式

​ 使用i进入,或者I,或者按一下insert键;

批量选择模式:

​ 使用ctrl+v进入;要注意使用hjkl进行移动,再次进入插入模式要使用I;

多文件模式

​ 使用vs 文件名进入;

​ 使用ctrl+ww实现光标在不同文件的切换;

底行模式

​ 1.!wq:!表示强制执行,w表示写入保存,q表示退出;

​ 2./+文本关键词:搜索功能,搜索文本关键词匹配的子串;

​ 3.!+各种指令操作:在vim里执行各种指令;

​ 4.set nu/nonu:显示行号/去掉行号;

三、编译工具gcc/g++

3.1gcc的使用

​ g++与gcc类似,只是编译.cc/.cpp./cxx结尾的文件,gcc编译的是.c文件。

​ 要注意的是,能够开发是因为安装了相关的头文件和库文件,头文件在/user/include/路径下存放着,库文件在/lib64下存放着;

​ 对一份源代码编译可细分为四个阶段,分别是预处理、编译、汇编、链接;

预处理阶段:

gcc -E test.c -o test.i -g
#这个阶段主要进行了去注释、头文件展开、条件编译、宏替换;
#E表示执行到预处理阶段结束,o表示以此方式命名,D表示定义一个量,用来进行条件编译;生成的.i文件本质上是一个较为干净的源文件,g表示以debug的方式进行编译,会留下许多调试信息;

编译阶段:

gcc -S test.i -o test.s
#这个阶段主要进行了语法检查,符号汇总,生成了汇编文件;
#S表示执行到编译阶段结束

汇编阶段:

gcc -c test.s -o test.o
#这个阶段是将汇编文件转换成二进制文件,形成符号表(注意此时的符号表不一定是有效的)
#c表示执行到汇编阶段结束,.o文件是可重定位目标二进制文件

链接阶段:

gcc test.o -o test.exe
#这个阶段会将多个二进制文件进行连接形成可执行文件或者库文件,进行合并符号表(此时的符号表才是有效的)
#不加选项直接生成的就是可执行程序,Windows下要求可执行程序必须是以.exe后缀结尾的;

​ 条件编译可以实现同时维护专业版和社区版的软件,具体使用不同的版本是使用条件编译就可以对代码进行切割;

3.2、编译完成常用的一些指令

1.od

od 二进制文件名
#进行二进制文件的查看

2.ldd

ldd test.exe
#查看可执行程序的依赖情况

3.file

file 可执行程序
#显示链接方式

4.readelf

readelf 可执行程序
#查看可执行程序的二进制构成,可执行程序一般是elf格式的二进制文件;

5.stat

stat 文件名
#可以查看文件的属性

3.3链接

​ Linux中.so是动态库,.a是静态库,Windows中.dll是动态库,.lib是静态库,库文件其实就是对.o文件进行打包。一般libname.so中name就是库文件的名字。

​ 安装开发包的本质就是安装头文件和对应的库文件,头文件提供声明,库文件提供实现和定义;默认使用的是动态库的方式进行链接。

​ 链接方式分为静态链接和动态链接;

​ 对于动态链接,动态库又被称为共享库,不同的程序都可以访问,只存在一份即可,但是程序对动态库的依赖性较大。

​ 对于静态库,是将库文件的内容拷贝到自己的可执行文件中,用哪些拷贝哪些,依赖性较弱,可以独立运行程序,但是会导致代码膨胀;

​ 形成可执行程序时,默认使用的连接方式是动态链接,所以必须提供动态库,进行静态链接时需要加选项-static;

四、自动化构建工具make/makefile

​ make:一条指令,makefile:是一个当前目录下的文件,通过依赖关系和依赖方法,进行栈结构的推导来完成自动化构建;

​ 注意依赖方法不可以顶格写。可执行程序和源程序的更新是通过时间戳来进行比较的,如果时间戳更新了就可以make重新构建,时间戳不更新,make就不会执行,这是做为了提高编译效率。

​ 如果想让对应的依赖关系总是被执行,.PHONY:伪目标,就会强制执行伪目标。

​ 特殊符号: @ :表示左边的目标文件, @ :表示左边的目标文件, @:表示左边的目标文件,^表示右边的目标文件;

​ 不想让依赖方法回显,可以在依赖方法前面+@;

.PHONY:all
all:tcpserverd tcpclient
tcpclient:TcpClient.cc
	@g++ -o $@ $^ -std=c++11 
tcpserverd:Main.cc
	@g++ -o $@ $^ -std=c++11 -lpthread
.PHONY:clean
clean:
	@rm -f tcpserverd tcpclient

五、git版本控制器

​ git是具有网络功能的版本控制器,是开源的并且既可以是客户端也可以是服务端,其功能主要是:1.本地开发进行版本管理;2.在企业进行多人协作;

​ 出现了基于git的商业化网站:gitee、github;

5.1git三板斧

git clone 网址
#将网络远端的分支拉取到本地
git add .
#将当前所有没被添加到仓库的东西添加到仓库暂存区里
git commit -m"message"
#提交到本地仓库
git push
#将本地仓库的内容推送到远端
git log
#查看提交历史记录
git status
#查看git状态,该执行哪一步了

六、gdb调试器

​ 使用gdb调试必须保证使用-g选项,因为gcc编译默认使用的是release方式发布的;

gdb 可执行程序
#l:表示查看代码内容
#q:表示退出调试模式
#l 0:表示从第一行开始看
#l 函数名:定位到函数所在位置
#r:表示运行可执行程序
#b n:在第n行打断点
#info b:查看所有的断点信息
#d 编号:删除编号地址
#n:表示逐过程执行,相当于vs2019的F10
#s:表示逐语句执行,相当于vs2019的F11
#p 变量:查看变量
#display 变量:变量常显示
#undisplay 编号:取消变量常显示
#until n:跳转到n行
#finish:直接完成函数
#c:继续运转到下一个断点
#disable:关闭断点
#enable:开启断点
#set 变量名:修改变量
#bt:查看调用栈
#info locals:查看局部变量
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值