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

news2024/9/26 15:36:20

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 调试阶段

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于OpenHarmony开发的健康生活应用(ArkTS)

健康生活应用&#xff08;ArkTS&#xff09; 介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用&#xff0c;主要功能包括&#xff1a; 用户可以创建最多6个健康生活任务&#xff08;早起&#xff0c;喝水&#xff0c;吃苹果&#xff0c;每日微笑&#xff0c;刷牙&#…

【python语法大练习】【题库】Python 基础练习题库大全

【题库】Python 基础练习题库大全 编程题1. 从键盘输入两个数&#xff0c;求它们的和并输出2. 从键盘输入三个数到a,b,c中&#xff0c;按公式值输出 (input().split())3. 输出“人生苦短&#xff0c;我学Python”4. 计算 111213...m (sum函数)5. 计算分段函数[1] (format)6. 阶…

Ubuntu连接Xshell

Ubuntu连接Xshell 1、安装ssh&#xff0c;开启服务 1、安装ssh sudo apt-get install openssl-server 2、启动ssh服务 /etc/init.d/ssh start 3、修改文件&#xff0c;允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitR…

ESP-IDF中的event loop library事件循环库

文章目录 简介事件循环库的使用示例&#xff1a; 简介 Event Loop Library是一种信号传递机制&#xff0c;事件循环库允许组件声明事件&#xff0c;其他组件可以向其注册处理程序——当这些事件发生时将执行的代码。这允许松散耦合的组件将所需的行为附加到其他组件的状态更改…

华为OD机试(20222023)真题目录 + 考点 + 通过率

目录 华为OD机试是什么&#xff1f;华为OD面试流程&#xff1f;华为OD机试通过率高吗&#xff1f;华为OD薪资待遇&#xff1f;华为OD晋升空间&#xff1f;华为OD刷题列表&#xff0c;一天三题&#xff0c;刷出算法新高度&#xff0c;刷出人生新际遇。 大家好&#xff0c;我是哪…

基于Hebb学习的深度学习方法总结

基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 3 SoftHebb学习算法3.1 WTA(Winner Take All)3.2 SoftHebb3.3 多层Hebb网络3.4 Hebb学习的性能测评 参考文献 0 引言 总所周知&#xff0c;反向传播算法&#xff08;back-propagating, BP&…

你想要的【微前端】都在这里了! | 京东云技术团队

作者&#xff1a;京东零售 郑炳懿 开篇&#xff1a; 如果你不知道微前端是什么&#xff0c;或者不知道微前端能解决什么问题&#xff0c;那么你可能不需要微前端。 在我看来&#xff0c;对于每一个没有使用过的新技术&#xff0c;都应该有以下几个过程&#xff1a; 1、调研…

【Android签名文件META-INF】

android安装包apk中&#xff0c;有一个META-INF文件夹&#xff0c;该文件夹下面必须有以下几个扩展名的文件&#xff1a;.SF&#xff0c;.RSA&#xff0c;*.MF。一般为MANIFEST.MF&#xff0c;包名.SF&#xff0c;包名.RSA&#xff08;也有可能是EC或者DSA&#xff09;。 其中…

聊聊ClickHouse向量化执行引擎-过滤操作

俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库&#xff0c;其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data&#xff0c;即ColumnVector::data&#xff0c;存放数据 2、使用uint8类型&#xf…

Metasploit渗透测试:工作区使用帮助

目录 ​编辑 help 查看工作区 添加工作区 显示工作区详情

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(中)》

案例分析 - 计算题&#xff08;中&#xff09; 章节其他部分3 成本管理3.1 挣值分析3.1.1 概念3.1.2 公式3.1.3 参数关系3.1.4 题目 3.2 挣值管理3.3 预测3.3.1 ETC(完成尚需估算)3.3.2 EAC(完工估算)3.3.3 BAC(完工预算) 3.4 绩效审查 章节其他部分 案例分析 - 计算题&#x…

27从零开始学Java之详解复杂的二维数组与多维数组

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前几篇文章中&#xff0c;壹哥给大家介绍了Java里的一维数组&#xff0c;涉及到了数组的创建初始化…

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程

分布式系统中的相关概念 &#xff08;一&#xff09;互联网项目架构目标-特点 &#xff08;二&#xff09;互联网项目架构目标-目标 &#xff08;三&#xff09;集群和分布式 &#xff08;四&#xff09;架构演进 Dubbo概述 &#xff08;一&#xff09;dubbo概述 1、dub…

Oracle 修改 sga_target 参数设置,虚拟内存值设置

记录一次Oracle数据库单实例维护里程。 数据库启动报错 sga_target参数设置太小&#xff0c;导致数据库无法启动&#xff0c;这种情况下需要修改数据库的spfile的sga_target参数 修复过程如下。 1、启动报错 2、根据spfile 创建pfile 文件。 create pfile‘/app/oracle/i…

项目经理在项目中是什么角色?

有人说&#xff0c;项目经理就是一个求人的差事&#xff0c;你是在求人帮你做事。 有人说&#xff0c;项目经理就是一个与人扯皮的差事&#xff0c;你要不断的与开发、产品、测试等之间沟通、协调。 确实&#xff0c;在做项目的时候&#xff0c;有的人是为了完成功能&#x…

MYSQL基本操作(增删改查)

数据库的列类型 int&#xff1a;整型 用于定义整数类型的数据 float&#xff1a;单精度浮点4字节32位 准确表示到小数点后六位 double&#xff1a;双精度浮点8字节64位 char&#xff1a;固定长度的字符类 用于定义字符类型数据&…

防抖节流(回顾)

防抖定义应用场景&#xff1a;实现思路&#xff1a;_.debounce 源码 节流定义应用场景&#xff1a;实现思路&#xff1a;_.throttle 防抖和节流的区别scroll 事件下的区别mousemove 事件下的区别 防抖 定义 强制函数在固定时间只执行一次&#xff0c;多余执行无效 应用场景&…

Node 10 接口

接口 简介 接口是什么 接口是 前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则 &#xff0c;根据请求响应结果 接口的英文单词是 API (Application Program Interface)&#xff0c;所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…

企业如何通过CRM系统有效触达客户,获取潜在商机

“守株待兔”式坐等客户上门的时代了已经过去了&#xff0c;尤其是在存量时代&#xff0c;企业想要提高销售&#xff0c;扩大客源&#xff0c;就要不断的通过各种渠道来去拓展自己的客户和销路&#xff0c;而互联网时代&#xff0c;获客的渠道也丰富多样&#xff0c;企业选择好…