g++ linux 编译开栈_Linux---centos常用开发工具(vim、gcc/g++、gdb、Makefile、git)

一、Linux软件包管理器yum

1.什么是软件包?

将一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过软件包管理器可以很方便的获取到这些编译好的软件包,直接进行安装。软件包和软件包管理器,就好比"App"和"应用商店"这样的关系。yum(Yellow dog Updater, Modifified)是Linux下非常常用的一种包管理器.主要应用在Fedora, RedHat, Centos等发行版上.

2.rz/sz的使用

这个工具用于windows机器和远端的Linux机器通过XShell传输文件。安装完毕之后可以通过拖拽的方式将Windows机器中的程序上传到Linux机器中。也可以以指令的方式进行使用。

9e324152d0a003ed030d22c3de7640e6.png

3.yum基本命令和使用

1)查看软件包

yum list 显示所有软件包   例:yum list | grep lrzsz  ---查找rzsz相关的软件包

2)下载安装软件包

yum install 安装软件包  例:yum install lrzsz

3)卸载软件包

yum remove 卸载软件包  例:yum remove lrzsz

注意:安装和卸载软件包需要root权限,同时yum的所有操作必须保证主机网络畅通(ping 指令可以验证网络是否畅通)

二、Linux编辑器---vim

1.vim的基本概念

vim的3种常用模式(vim一共有12种模式,但只有3种模式最常用),分别是命令(普通)模式(normal mode)、底行模式(last line mode)、插入模式(insert mode)。

正常/普通/命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到last line mode

插入模式:只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+:即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes

2.vim的基本操作

1)vim打开和退出文件

a.打开文件

基本命令:vim +文件名;例vim test.c

注意:使用vim打开文件时,如果文件存在则打开文件,如果文件不存在则在当前目录下创建该文件并打开。

b.退出文件

使用vim打开一个文件,要想退出必须在底行模式下使用命令退出。①w保存文件;②q!强制退出文件(不保存);③wq保存并退出;

2)vim三种模式的相互切换

a.插入模式、底行模式切换到普通模式:Esc键

b.普通模式切换到底行模式:shift+: 键

c.插入模式切换到底行模式:Esc键切换到普通模式,再shift+: 键切换到底行模式

d.正常模式切换到插入模式:i / a / o键均可切换到插入模式

i:光标处于上次所在位置不变

a:光标默认处于上次光标所在位置的下一个位置

o:上次光标所在位置的下一行(会自动换行,使后边内容后移一行)

3)vim下的基本命令

a.普通模式的基本命令

yy:复制当前行

nyy:复制n行内容,从当前光标所在行开始

p:粘贴

np:粘贴n行内容其实,将复制到的内容粘贴n次

dd:删除当前行

ndd:删除从当前行开始的n行内容

u:撤销上次的操作

gg:将光标定位到文件的开始位置

shift + g:将光标定位到文件的最后一行的开始位置

ngg:将光标定位到第n行的开始位置

shift + 4($):将光标定位到当前行的末尾位置

shift + 6(^):将光标定位到当前行的开始位置

b ,w:按照单词进行前后移动

nb,nw:前后移动n个单词

x,nx:从左向右删除光标所在位置的内容(nx删除光标所在位置及之后的n个字符的内容)

shift + x:从右向左删除光标所在位置的内容

shift + ~:批量化大小写转换

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

b.底行模式下的基本命令

/文本内容 or ?文本内容:查找文本,n选择下一个

set nu / nonu:显示或者取消行号

vs 文件名:多文件显示,光标在哪个文件就编辑哪个文件

c.其他命令(普通模式)

ctrl + r:反撤销

ZZ:保存退出

三、Linux编译器---gcc/g++

1.gcc编译C语言程序的过程

C语言程序的编译分预处理、编译、汇编和链接四步,在gcc下每一步的具体操作如下:

预处理:展开头文件、宏替换、去掉注释、条件编译

命令:gcc file.c -E -o file.i 使用E选项堆.c文件进行编译生成.i文件

编译:将c程序编译形成汇编代码

命令:gcc file.i -S -o file.s  .s文件为生成的汇编代码文件

汇编:将汇编形成二进制目标文件

命令:gcc file.s -c -o file.o  .o文件为生成的二进制目标文件

链接:将目标文件和系统库链接形成可执行程序

命令:gcc file.o -o file   file为生成的可执行程序

gcc常用选项:-E(.i)  -S(.s)  -c(.o)  -o(可执行程序)

2.函数库和链接方式

1)动态库和静态库

静态库:静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。

动态库:动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。完成了链接之后,gcc

2)静态链接和动态链接

gcc默认使用的是动态库进行动态链接,在编译时加上-static选项就会使用静态库进行静态链接。

静态链接和动态链接的比较

动态链接:程序体积比较小,节省系统资源;一旦库确实所有依赖的程序都不可运行了

静态链接:程序体积比较大,浪费系统资源;当库缺失时不会影响其他程序的执行

四、Linux调试器---gdb

gdb是Linux下常用的调试器工具,程序的发布有两种形式,debug版本和release版本,只有debug版本的程序才能进行调试(release版本的程序没有调试信息)。Linux下默认生成的是release版本的,需要生成debug版本的程序需要加上-g选项即可。

相关命令

gdb文件名:开始调试文件

ctrl + d  or quit(q):退出调试

list(简写l)  n:显示第n行的程序(其他行也可能显示出来)

list(简写l) 函数名:显示该函数内容

r  or  run:执行程序

n  or  next:单条执行函数

s  or  step:单条执行遇到函数会进入

break  or  b行号:在某一行打断点(也可跟函数名,给该函数打断点)

info  break:查看断点信息

fifinish:执行到当前函数返回,然后挺下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb

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

make是一个命令工具,是一个解释makefifile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefifile都成为了一种在工程方面的编译方法。make是一条命令,makefifile是一个文件,两个搭配使用,完成项目自动化构建。

1.原理

1) make会在当前目录下找名字叫“Makefifile”或“makefifile”的文件。

2) 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件。

3) 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用 touch测试),那么,他就会执行后面所定义的命令来生成hello这个文件。

4) 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)

5) 当然,你的C文件和H文件是存在的啦,于是make会生成hello.o文件,然后再用hello.o文件声明make的终极任务,也就是执行文件hello了。

6) 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

7) 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

8) make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

2.依赖关系和依赖方法

依赖关系:在使用gcc命令编译C语言程序时,如:gcc -c hello.s -o hello.o命令中,需要通过hello.s文件生成hello.o文件,即生成hello.o文件需要依赖hello.s文件。同样在Makefile中也需要这样的依赖关系,例如Makefile中hello.o:hello.s就是依赖hello.s生成hello.o文件。

依赖方法:在Makefile中除了需要这样的依赖关系之外,还需要执行这样依赖关系的依赖方法,Makefile中的依赖方法就形如:gcc -c hello.s -o hello.o这样的命令。同时需要注意的是Makefile中依赖方法需要以tab键开头。

伪目标:Makefile中.PHONY修饰的表明是一个伪目标,如.PHONY:clean就表示clean是一个伪目标,伪目标的表明该目标总是被执行的。

3.项目清理

在软件工程项目中,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被执行的。可以将我们的 hello目标文件声明成伪目标,测试一下

4.示例

//初级版

hello:hello.o //生成hello需要依赖hello.o

gcc hello.o -o hello //上条语句所需的依赖方法

hello.o:hello.s //生成hello.o需要依赖hello.s文件

gcc hello.s -c -o hello.o

hello.s:hello.i

gcc hello.i -S -o hello.s

hello.i:hello.c

gcc hello.c -E -o hello.i

.PHONY:clean //生成clean伪目标

clean:

rm -rf *.i *.s *.o

//中级版,可以使用[email protected]代替待生成文件,#^代替依赖关系文件

hello:hello.o //生成hello需要依赖hello.o

gcc $^ -o [email protected] //上条语句所需的依赖方法

hello.o:hello.s //生成hello.o需要依赖hello.s文件

gcc $^ -c -o [email protected]

hello.s:hello.i

gcc $^ -S -o [email protected]

hello.i:hello.c

gcc $^ -E -o [email protected]

.PHONY:clean //生成clean伪目标

clean:

rm -rf *.i *.s *.o

//高级版,Makefile文件中可以定义变量

h=hello

h1=hello.o

h:h1 //生成hello需要依赖hello.o

gcc $^ -o [email protected] //上条语句所需的依赖方法

h1:hello.s //生成hello.o需要依赖hello.s文件

gcc $^ -c -o [email protected]

hello.s:hello.i

gcc $^ -S -o [email protected]

hello.i:hello.c

gcc $^ -E -o [email protected]

.PHONY:clean //生成clean伪目标

clean:

rm -rf *.i *.s *.o //其他文件名也可以使用定义变量的方式进行替换

六、git在Linux下的使用

1.克隆本地仓库:git clone 仓库连接

2.git add 添加代码

3.git comnit -m ’information‘提交改动到本地

4.git push同步到远程服务器

Linux下默认使用的是动态链接,生成的是release版本

转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值