【Linux】5. 开发工具的使用(gcc/gdb/makefile)

简介: 【Linux】5. 开发工具的使用(gcc/gdb/makefile)

Linux编译器-gcc/g++使用

1. 复习编译链接过程

在这里插入图片描述

2. 理解选项当中的含义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
==这些选项难记住,怎么办? -- ESc - iso(对应)==

在这里插入图片描述

gcc选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0
    -O1
    -O2
    -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。

3. 动静态链接的认识

首先我们需要明确一点:我们自己实现的代码和库中的代码是两个概念
C标准库是别人已经编译好,提供我们使用的,而我们在使用库中的代码(printf)时,我们只是自己写了函数调用的接口,并没有对应的实现,只有当链接的时候对应的实现才和我们编译的代码所关联起来!
所以链接的本质:在调用库函数时是如何跟标准库建立关联关系的?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
==系统为了支持编译,给用户提供了什么?==
系统给我们提供了标准库的.h (告诉我们怎么调用函数)和标准的动静态库.so/.a(告诉链接器函数的位置)

用户的代码+库代码 <==> 可执行程序

==这些结论只在linux系统下有效嘛?==
windows下的原理也是一样的,只不过windows下动态库是.dll 静态库是.lib
默认形成的可执行程序都是动态链接的

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

1. 背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2. 使用

在这里插入图片描述

3. 理解其中的语法规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 理解makefile的推导规则

在这里插入图片描述

Linux调试器-gdb的使用

调试是代码编写中不可或缺的一环
在windows下调试是通过F9 F10 F10 和可视化窗口进行调试
而Linux下呢? 是通过命令行进行调试
二者的调试思路是一样的,只不过是操作方式不一样罢了
在这里插入图片描述
mytest.c的代码

1. gdb XXX

在这里插入图片描述
在这里插入图片描述
但为什么显示文件内容无法显示呢??
答案:==默认情况下,gdb无法对现在发布的程序进行调试==在Linux中,用gcc/g++生成软件时默认是release版本
在这里插入图片描述

2. 调试模式下的指令

2.1 l (list) 显示代码

在这里插入图片描述

2.2 添加/删除/查看断点

在这里插入图片描述

2.3 调试阶段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2天前
|
NoSQL Linux 测试技术
Linux开发工具——gdb篇
Linux开发工具——gdb篇
|
2天前
|
存储 Linux 开发工具
Linux开发工具——gcc篇
Linux开发工具——gcc篇
|
2天前
|
搜索推荐 NoSQL Linux
Linux开发工具——vim篇
Linux开发工具——vim篇
|
2天前
|
Ubuntu Linux 编译器
【Linux】4. 开发工具的使用(yum/vim)
【Linux】4. 开发工具的使用(yum/vim)
48 2
|
2天前
|
Linux 开发工具 Android开发
【Linux修行路】基础开发工具——yum
【Linux修行路】基础开发工具——yum
|
2天前
|
Linux 开发工具 C语言
【linux基础(七)】Linux中的开发工具(下)--make/makefile和git
【linux基础(七)】Linux中的开发工具(下)--make/makefile和git
|
2天前
|
Linux 编译器 开发工具
【linux基础(六)】Linux中的开发工具(中)--gcc/g++
【linux基础(六)】Linux中的开发工具(中)--gcc/g++
|
2天前
|
人工智能 数据可视化 Linux
【linux基础(五)】Linux中的开发工具(上)---yum和vim
【linux基础(五)】Linux中的开发工具(上)---yum和vim
|
NoSQL Linux 开发工具
Linux开发工具的使用
1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用     1.
1327 0
|
2天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
196 2