主页 > 手机  > 

Linux环境开发工具

Linux环境开发工具
Linux软件包管理器yum

Linux下安装软件方式:

源代码安装rpm安装——Linux安装包yum安装——解决安装源、安装版本、安装依赖的问题

yum对应于Windows系统下的应用商店 使用Linux系统的人:大部分是职业程序员

客户端怎么知道去哪里下载软件? Linux生态:

开源(一种商业战略)开源不等于免费

选操作系统的标准:生态好(使用者的角度)

站在OS的设计者和推动者,他们应该做什么?

提供云服务器和软件服务

安装rzsz

Windows和Linux下消息互传

yum list |grep lrzsz yum install lrzsz.x86_64 yum remove -y lrzsz.x86_64#-y:是否询问

yum怎么知道去哪里下载?

yum内置下载链接

yum install -y epel-release#扩展yum源 Linux编辑器-vim使用

vim:文本编写——写代码(多模式编辑器)

命令模式(默认模式):用户所有的输入都会被当作命令,一般不会作为文本输入

命令模式下光标定位

gg:定位光标到最开始行

G:定位光标到最结尾行

n+G:定位光标到第n行

(n)yy:复制光标所在行(后n行)

(n)p:粘贴(n重复行)到光标所在下一行

(n)dd:剪切、删除(n行)

u:撤销命令

ctrl+r:撤销之前的撤销

$:定位光标到当前行结尾

^:定位光标到当前行开始

w、b:光标按照单词进行行内、跨行移动

h、j、k、l:光标按左、下、上、右移动

~:对光标所在字符进行大小写转换

(n)r:对光标及其之后共n个字符替换为新的字符(需输入)

R:替换模式,对光标所在内容进行重新输入

(n)x:对光标及其之后的字符进行删除,共删除n位

底行模式下命令

多文件如何处理?

vs+文件名:打开另一个文件编辑窗口

ctrl+ww:窗口光标切换

光标在哪一个窗口里面,就对哪一个窗口进行操作。

w!:强制保存

q!:强制退出

set nu:调出行号

set nonu:去掉行号

vim的简单配置 touch .vimrc vim .vimrc #一个用户一个vim配置文件,不会互相影响,不建议给root做配置 给普通用户添加白名单 sudo#新建的普通用户无法sudo,必须添加到白名单 #在root下操作 ll /etc/sudoers #在/etc/sudoers中root ALL=(ALL) ALL下方添加 #用户名 ALL=(ALL) ALL

Linux编译器-gcc/g++使用 gcc mycode.c#用来编译C语言 g++ mycode.cpp#用来编译CPP 背景知识

为什么在windows或Linux上能编译运行对应的源文件?

需要在系统中提前安装C/C++开发相关的头文件、库文件

C/C++开发环境不仅仅指的是vs、gcc、g++,更重要的是语言本身的头文件和库文件。

安装vs,要选择对应的开发包,同步也在下载对应的头文件和库文件

编译型语言安装开发包一定需要下载对应的头文件和库文件

ls /usr/include/#linux下头文件和库文件所在位置 程序运行过程 预处理 gcc -E mycode.c -o mycode.i#生成.i文件 去注释头文件展开条件编译 #ifndef #else #endif 宏替换

条件编译的应用场景:

提供社区版和专业版的软件公司,需要维护两份代码吗?

不需要!根据不同的编译条件,在专业版裁减掉社区版不需要的功能即可。

编译(生成汇编) gcc -S mycode.c -o mycode.s#生成.s文件 汇编(生成机器可识别代码) gcc -c mycode.s -o mycode.o#生成mycode.o文件 od mycode.o#查看二进制文件内容 #mycode.o:可重定位目标二进制文件,简称目标文件,windows下的obj文件,不可以独立执行,需要经过链接后才能执行 链接(生成可执行文件或库文件) gcc mycode.o -o mytest#直接生成可执行文件mytest #将可重定位目标二进制文件和库文件进行链接才能形成可执行程序 动态库&&静态库

Linux下:.so(动态库)、.a(静态库)

Windows下:.dll(动态库)、.lib(静态库)

库有自己的命名规则:libname.so.XXX

机器默认值只会安装动态库

库其实就是把愿望呢间经过一定的翻译,然后打包——只给你提供一个文件即可,不用给你提供太多的源文件,也可以达到隐藏源文件的目的。

头文件提供方法的声明+库文件提供方法的实现+你的代码=你的软件

库的价值:不让我们做重复动作

我们的.o和库是如何链接的?

动态链接

动态库(共享库)

动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序,可能导致很多程序都无法正常运行。

ldd mytest#查看可执行程序依赖的动态库 静态链接

在编译器使用静态库进行静态链接的时候,会将自己的方法拷贝到目标程序中,该程序以后不会再依赖静态库

gcc mycode.c -o mytest ldd mytest #在Linux中,编译形成可执行程序,默认采用的就是动态链接,提供动态库 gcc mycode.c -o mytest -static#静态链接(体积变大) #在Linux中,如果要采用静态链接的方式形成可执行程序,需要添加-static选项 centos yum安装C/C++静态库 sudo yum install -y glibc-static sudo yum install -y libstdc++-static 如果没有静态库,能否执行-static?

不能

如果没有动态库,但是有静态库,而且gcc能找到?

gcc mycode.c -o mytest也可以运行,gcc默认优先动态链接

-static的本质:改变链接优先级

可执行程序不一定全是动态链接或者静态链接,可能都包括。

如果加-static,所有的链接要求都需要是静态链接

动静态链接的优缺点

动态库:

优点:动态库是共享库,可以有效的节省资源(磁盘空间、内存空间、网络空间)

缺点:动态库一旦缺失,会导致各个程序无法运行

静态库:

优点:静态库不依赖库,程序可以独立运行

缺点:体积大,比较消耗资源

Linux项目自动化构建工具-make/Makefile

make是一条指令

Makefile是当前目录下的一个文件

mycode: mycode.c#依赖关系 gcc -o mytest mycode.c#依赖方法 clean: rm -f mycode 依赖关系+依赖方法

make会自动推导Makefile中的依赖关系(栈式结构)

为什么只能make一次?

没有必要多次make,提高我们的编译效率

怎么做到的?

比较源文件和可执行程序的Modify(最近修改)时间

源文件形成可执行文件。

先有源文件,才有可执行。一般而言,源文件的Modify时间要比可执行的Modify时间早

如果我们更改了源文件,历史上还有可执行,那么源文件的Modify一定比可执行晚。

stat mytest#查看mytest的文件时间 #Access:文件被访问 #Change:文件属性被修改 #Modify:文件内容被修改 touch mytest#mytest已存在,把mytest的所有时间更新成最新的

make会根据源文件和可执行的新旧,判断是否需要重新执行依赖关系进行编译!

mycode: mycode.c gcc -o $@ $^ #$@:目标文件 #$^:源文件 .PHONY:clean#伪目标,总是被执行 clean: rm -f mycode 使用git命令行 什么是git?

具有网络功能的版本控制器(开源)

client和server是一体的

本地仓库+远端仓库

git如何使用? yum install git git clone 链接 git add mycode git commit -m "自己的练习代码" git push git的其他问题 git log#提交日志 git status#提交状态 #.gitignore Linux调试器-gdb使用 debug&&release

debug可以被追踪、调试,形成可执行程序的时候会有调试信息

gcc默认编译是release方式发布的,不能直接调试

如果要以debug方式发布,必须携带-g选项

gcc -o mytest mycode.c -g

要被gdb调试,必须以debug方式发布

gdb命令 gdb mycode.c#开始调试mycode.c q#退出调试,退出后上次调试信息会自动被清理掉 l 行号#显示源代码,每次列10行(行号所在位置在中间) l 函数名#列出某个函数的源代码。 r#运行程序 b 行号#在行号打断点 info b#查看断点信息 d 断点编号#删除对应的断点信息 b 文件:行号#在对应文件行号打断点 n#逐过程 s#逐语句 p 变量#查看变量的信息 display 变量#常显示变量的信息 undisplay 编号#取消编号对应的常显示 until 行号#调试转到对应的行、快速跳过函数代码快 finish#结束当前函数的调试 c#跳到下一个断点 disable 断点编号#禁用断点 undisable 断点编号#启用断点 set 变量#设置变量的值 bt#查看各级函数调用及参数 info locals#查看当前栈帧局部变量的值
标签:

Linux环境开发工具由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux环境开发工具