【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
相关文章
|
4天前
|
数据可视化 Unix Linux
Linux|基础环境开发工具使用(1)
Linux|基础环境开发工具使用(1)
|
6天前
|
Linux C语言
suse linux 11 安装GCC开发环境
suse linux 11 安装GCC开发环境
11 0
|
6天前
|
NoSQL Java Unix
Linux:调试器 - gdb
Linux:调试器 - gdb
20 1
|
6天前
|
编译器 Linux C语言
Linux:编译器 - gcc
Linux:编译器 - gcc
12 4
|
6天前
|
NoSQL Linux 编译器
【Linux】开始使用gdb吧!
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
52 17
【Linux】开始使用gdb吧!
|
6天前
|
IDE Linux 开发工具
【Linux】 开始使用 gcc 吧!!!
我们在windows环境和macos环境里都有功能强大的集成开发环境(IDE)供我们使用 ,但是在Linux中我们如何编译运行我们的代码呢?这里就需要使用gcc / g++ 了。
27 0
【Linux】 开始使用 gcc 吧!!!
|
6天前
|
Linux 开发工具 Android开发
【Linux修行路】基础开发工具——yum
【Linux修行路】基础开发工具——yum
|
6天前
|
NoSQL Linux C语言
【Linux】Linux调试器-gdb使用
【Linux】Linux调试器-gdb使用
8 0
|
6天前
|
编译器 Linux C语言
【Linux】编译器-gcc/g++
【Linux】编译器-gcc/g++
28 2
|
6天前
|
Linux 编译器 C语言
Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)
Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)