【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
相关文章
|
23天前
|
Shell Linux 网络安全
Linux怎样在使用ssh 链接时就指定gcc 的版本
Linux怎样在使用ssh 链接时就指定gcc 的版本
22 7
|
23天前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
80 2
|
23天前
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
32 2
|
4天前
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
8 0
|
14天前
|
Java Linux 编译器
编写和使用Linux Makefile
编写和使用Linux Makefile
|
18天前
|
Java 编译器 Linux
程序技术好文:详解Linux安装GCC方法
程序技术好文:详解Linux安装GCC方法
28 0
|
19天前
|
Linux
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现
|
20天前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
21 0
|
NoSQL Linux 开发工具
Linux开发工具的使用
1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用     1.
1331 0
|
1天前
|
关系型数据库 MySQL Linux
Linux命令systemctl详解
`systemctl`是Linux系统用于管理systemd服务的核心命令,它与systemd守护进程交互,实现启动、停止、重启服务及查看服务状态等功能。主要参数包括`start`、`stop`、`restart`、`status`、`enable`和`disable`等。例如,启动Apache服务使用`systemctl start httpd.service`,查看服务状态用`systemctl status &lt;service&gt;`。使用时需注意权限,服务名通常以`.service`结尾,但命令中可省略。最佳实践包括利用tab键补全、定期查看服务状态和合理配置服务自启。