个人主页:东洛的克莱斯韦克-CSDN博客
祝福语:愿你拥抱自由的风
目录
vim编辑器
Linux编译器:gcc/g++使用
gcc和g++的选项
编译过程
动静态库的链接
Linux项目的自动化构建
生成可执行程序
清理可执行程序
Linux调试器-gdb使用
git和gitee
vim编辑器
vim是文本编辑器,可用于编写代码
【linux】如何优雅的使用vim编辑器-CSDN博客
Linux编译器:gcc/g++使用
保存代码的文件属于文本文件,计算机并不认识文本文件,需要把文本文件转成二进制文件代码才能运行。
gcc和g++就是这样的工具,gcc是用来编译C语言的,g++是用来编译C++的。小编只需讲清gcc即可,gcc的概念和选项完全可以迁移到g++。
gcc和g++的选项
下面是gcc和g++的选项,小编会用编译过程和实例详解一些常用选项
-E
只激活预处理
,
这个不生成文件
,
你需要把它重定向到一个输出文件里面-S
编译到汇编语言不进行汇编和链接-c
编译到目标代码-o
文件输出到 文件-static
此选项对生成的文件采用静态链接-g
生成调试信息。
GNU
调试器可利用该信息。-shared
此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库
.-O0
-O1
-O2
-O3
编译器的优化选项的
4
个级别,
-O0
表示没有优化
,-O1
为缺省值,
-O3
优化级别最高-w
不生成任何警告信息。-Wall
生成所有警告信息。
编译过程
预处理
(
进行宏替换
)
预处理功能主要包括宏定义
,
文件包含
,
条件编译
,
去注释等
预处理指令是以
#
号开头的代码行
一般把预处理后的代码放到以.i为后缀的文件中,不是以.i为后缀也不影响。
编译(生成汇编)
在这个阶段中
,gcc
首先要检查代码的规范性、是否有语法错误等
,
以确定代码的实际要做的工作
,
在检查 无误后,gcc
把代码翻译成汇编语言
一般把编译的代码放到以.s为后缀的文件中,不是以.s为后缀也不影响。
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的
“.s”
文件转成目标文件
,这里的目标文件本质是计算机能看懂的二进制文件。
连接(生成可执行文件或库文件)
在成功编译之后
,
就进入了链接阶段.o文件已经是二进制文件了,为什么不是最终的可执行文件呢?
因为我们的代码中调用了一些C语言的库函数,而我们的代码中只有库函数的声明和调用,库函数的实现在C语言的库中,对于任何一门语言都需要将自己的库安装在系统的特定路径下。
而链接方式有两种,静态链接和动态链接
动静态库的链接
静态库是指编译链接时
,
把库文件的代码全部加入到可执行文件中
,
因此生成的文件比较大
,
但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
动态库与之相反
,
在编译链接时并没有把库文件的代码加入到可执行文件中
,
而是在程序执行时由运行时链接文件加载库,
这样可以节省系统的开销。动态库一般后缀名为
“.so”,
gcc
在编译时默认使用动态库。
完成了链接之后
,gcc
就可以生成可执行文件(默认情况下gcc选择动态链接)
动静态链接的优缺点:
静态链接之后不再需要依赖函数库,可独立存在,但文件的体积变得会很大。
动态链接之后文件的体积很小,但必须依赖函数库才能运行。
链接后的可执行程序可用
./ 运行
如下示例(gcc不带选项时可以直接生成可执行程序)
Linux项目的自动化构建
我们每次要生成可执行程序都需要输入gcc或g++指令,清理可执行程序都需要用rm指令。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。我们需要不断输入gcc指令或g++指令和rm指令来完成上述操作吗?
答案是不需要,我们只需要在源文件目录下创建名为makefile的文件,将生成和清理可执行程序方案的指令保存到该文件,再通过make一个命令工具解释makefile文件中的指令完成项目的编译和清理工作。
也就是说makefile是文件,make是指令,以此来完成自动化构建。
那么怎么在在makefile文件中保存相关指令呢?假设我们有test.c源文件,想要生成test可执行程序。需要有如下格式
生成可执行程序
依赖关系,两个文件的依赖关系用冒号分隔,冒号左边的文件依赖于冒号右边的文件,如果可执行程序依赖多个源文件,多个源文件之间需要用冒号分隔。
test : test.c
依赖方法,文件之间建立关系之后需要指定方法。
gcc test.c -o test
如下示例
清理可执行程序
rm依赖方法不需要构建文件之间的依赖关系,其依赖关系为空
如下示例
Linux调试器-gdb使用
程序的发布方式有两种,
debug
模式和
release
模式
Linux gcc/g++
出来的二进制程序,默认是
release
模式
要使用
gdb
调试,必须在源代码生成二进制程序的时候
,
加上
–
g
选项
退出:
ctrl + d
或
quitlist
/
l
行号:显示
binFile
源代码,接着上次的位置往下列,每次列
10
行。list
/
l
函数名:列出某个函数的源代码。r
或
run
:运行程序。n
或
next
:单条执行。s
或
step
:进入函数调用break
(
b
)
行号:在某一行设置断点break
函数名:在某个函数开头设置断点info break
:查看断点信息。finish
:执行到当前函数返回,然后挺下来等待命令
(
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
git和gitee
git是一款开源的软件,它即可以是服务端也可以是客户端。git的主要功能是保存代码的不同版本,也可以完成多人协作。
gitee是基于git内核写的网页版git,只需在官网注册账号即可使用。
在Linux操作系统下载git只需输入yum install git指令即可
如何将本地代码推送到远端仓库呢(gitee)
下载项目到本地
创建好一个放置代码的目录
.
git clone [url]
这里的
url
就是刚刚建立好的 项目 的链接
三板斧第一招
: git add
将代码放到刚才下载好的目录中
git add [文件名]
先将要提交的文件拷贝到仓库目录下
三板斧第二招
: git commit
提交改动到本地
git commit -m “日志信息”
提交的时候应该注明提交日志
,
描述改动的详细内容
如果是第一次使用git,会提示你输入两条指令,一条指令用来保存你的邮箱,一条保存你的名字
三板斧第三招
: git push
git push
同步到远端服务器上
需要填入用户名密码