【ARM 嵌入式 编译系列 2.4 -- GCC 编译参数学习 -Wl,--gc-sections 】


请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】


文章目录

    • 概述
      • `-Wl` 选项
        • 例子:
      • `--gc-sections` `--gc-sections`
        • 例子:
      • `-Wshadow`
        • 例子:
      • `-Wlogical-op`
        • 例子:
      • `-Waggregate-return`
        • 例子:
      • `-Wfloat-equal`
        • 例子:
      • `-Wconversion`
        • 例子:
      • `-Wpointer-arith`
        • 例子:

概述

下面是 GCC 编译器选项和链接器选项的一部分,每个选项都有特定的作用。下面是每个选项的详细说明:

-Wl 选项

-Wl 是一个 GCC 编译器选项,用于将后面的选项传递给链接器。当你使用 GCC 编译并链接你的程序时,你可能需要传递特定的选项给链接器。-Wl 后面跟着一个逗号分隔的列表,其中包含了要传递给链接器的选项。

例子:
-Wl,--gc-sections 

--gc-sections --gc-sections

是一个链接器选项,它告诉链接器移除未被使用的代码和数据节(sections)。这是一个优化选项,可以减少最终生成的二进制文件的大小。当这个选项和编译器的 -ffunction-sections-fdata-sections 选项一起使用时,每个函数和数据项都会被放置在单独的节中,使得链接器能够删除未使用的部分。

例子:
-Wl,--gc-sections 

-Wshadow

这是一个编译器警告选项,它会在一个局部变量"遮蔽"了(即拥有相同名称)另一个作用域中的变量时生成警告。

例子:
-Wshadow 

-Wlogical-op

这是一个编译器警告选项,它会在检测到可疑的逻辑操作时生成警告,比如使用逻辑 &&|| 时可能会产生非预期的结果。

例子:
-Wlogical-op 

-Waggregate-return

这是一个编译器警告选项,它会在函数返回聚合类型(如结构体)时生成警告。这可能会导致潜在的效率问题,因为聚合类型通常比简单类型大,复制它们需要更多的时间。

例子:
-Waggregate-return 

-Wfloat-equal

这是一个编译器警告选项,它会在检测到浮点数直接比较是否相等时生成警告。因为浮点运算有精度问题,直接比较两个浮点数是否相等通常不是一个好方法。

例子:
-Wfloat-equal 

-Wconversion

这是一个编译器警告选项,它会在数据类型转换可能改变值时生成警告,比如将一个较大的整型转换成较小的整型可能会丢失数据。

例子:
-Wconversion 

-Wpointer-arith

这是一个编译器警告选项,它会在指针运算中潜在的问题出现时生成警告,比如对非数组指针进行下标访问。

例子:
-Wpointer-arith 

这些选项大多用于精细控制编译和链接过程,以及提高代码质量。你可以根据项目的需要选择性地使用这些选项以达到预期的效果。

  1. -gdwarf-4 这是一个编译器选项,用于生成调试信息。-gdwarf-4 指定使用 DWARF Version 4 格式的调试信息。DWARF 是一种调试文件格式,用于描述程序的数据结构,以便调试器能够理解程序的运行状态。版本 4 是该格式的一个版本,提供了特定的功能和优化。

  2. -xlinker 这是一个 GCC 选项,用于将后面的参数传递给链接器。每次使用 -xlinker 时,紧随其后的一个选项或参数就会被传递给链接器。

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

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

相关文章

2023年12月 电子学会 青少年软件编程等级考试Scratch三级真题

202312 青少年软件编程等级考试Scratch三级真题 一、单项题 第 1 题 运行左图程序,想得到右图中的效果,红色框应填写的数值是?( ) A:12 B:11 C:10 D:9 第 2 题 下列…

每天都美好的一天

每天我们都会遇到不同的事情,开心的、愤怒的、悲伤的等等,今天过完明天我们还得继续,所以一切又显得不那么重要。一天中如果有不开心的事情发生会影响我们当天很长一段时间,甚至未来几天。 今天所做之事都是自己明天的基础&#…

修改live server的默认浏览器(vscode)

在插件打开设置 修改选定浏览器

VC++中使用OpenCV进行颜色检测

VC中使用OpenCV进行颜色检测 在VC中使用OpenCV进行颜色检测非常简单,首选读取一张彩色图像,并调用函数cvtColor(img, imgHSV, COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函…

C++实现一个简单的学生管理系统

目录 1.一个简单的学生管理系统简介 2.定义一个 Student 类 2.1用于表示学生信息。 3.定义一个 StudentManager 类 3.1用于管理学生信息。 4.在 main 函数中 4.1使用上述两个类来实现一个简单的学生管理系统 5.C类模板 推荐阅读: calloc与realloc和malloc的…

多线程(看这一篇就够了,超详细,满满的干货)

多线程 一.认识线程(Thread)1. 1) 线程是什么1. 2) 为啥要有线程1.3) 进程和线程的区别标题1.4) Java的线程和操作系统线程的关系 二.创建线程方法1:继承Thread类方法2:实现Runnable接口方法3:匿名内部类创建Thread子类对象标题方法4:匿名内部类创建Runn…

MySQL TINYINT(1)和TINYINT(2)有什么区别?

文章目录 1.直接建表2.查询数据3.总结 身为程序员,拿事实说话拿代码说话最直观了,show the code 1.直接建表 CREATE TABLE tinyinttest (id int NOT NULL,a TINYINT(1) NOT NULL DEFAULT 0,b TINYINT(2) NOT NULL DEFAULT 0,c TINYINT(1) ZEROFILL NOT…

JSON 基本语法以及在Java 中的使用

文章目录 一、JSON 概述1.1 什么是 JSON1.2 JSON数据类型和语法1.3 JSON 优势 二、使用 JSON2.1 在 Java程序中使用 JSON2.2 Jackson的使用2.2.1 Jackson的简单介绍2.2.2 反序列化2.2.3 序列化 参考资料 一、JSON 概述 1.1 什么是 JSON JSON(JavaScript Object No…

Unity下实现跨平台的RTMP推流|轻量级RTSP服务|RTMP播放|RTSP播放低延迟解决方案

2018年,我们开始在原生RTSP|RTMP直播播放器的基础上,对接了Unity环境下的低延迟播放,毫秒级延迟,发布后,就得到了业内一致的认可。然后我们覆盖了Windows、Android、iOS、Linux的RTMP推送、轻量级RTSP服务和RTSP|RTMP播…

VRRP协议负载分担

VRRP流量负载分担 VRRP负载分担与VRRP主备备份的基本原理和报文协商过程都是相同的。同样对于每一个VRRP备份组,都包含一个Master设备和若干Backup设备。与主备备份方式不同点在于:负载分担方式需要建立多个VRRP备份组,各备份组的Master设备可以不同;同一台VRRP设备可以加…

ctfshow信息收集(web1-web20)

目录 web1 web2 web3 web4 web5 web6 web7 web9 web10 web11 web14 web15 web16 web17 web18 web19 web20 web1 根据提示的孩子开发的时候注释没有被及时删除 web2 js原因无法查看源代码 第一种方法 在url前加入 view-source: 会显示页面源代…

【车载HMI开发工具--EB GUIDE 与 Unity 合作提供一体化的沉浸式 HMI 设计开发工具链】【转载】

随着车载高性能计算平台的日益普及以及显示器尺寸和数量的不断增加,沉浸式车载人机交互界面(HMI)的需求也在持续增长。为了将实时 3D 技术带入车载 HMI 领域,Unity 与 Elektrobit (EB)展开了合作,EB 是推进 HMI 功能安…

数据分析完整流程一般包括哪几个环节/步骤

问题定义: 确定需要解决的问题或目标,明确分析的方向和目的。 数据收集: 收集与问题相关的数据,可以包括从各种来源获取的结构化或非结构化数据。 数据清洗: 对收集到的数据进行清理,处理缺失值、异常值和…

JavaScript 中的事件

1、鼠标事件&#xff1a; 鼠标单击事件&#xff08;click&#xff09;&#xff1a; 方法一 &#xff08;onclick&#xff09; <button id"btn" onclick"alert(88888)">点击弹框</button> 方法二&#xff08;利用addEventListener&#xff09;…

洛谷(CodeForces)历年愚人节题目,难度普及+/提高,让你怀疑自己智商

INTERCALC 题目描述 DO YOU EXPECT ME TO FIND THIS OUT? WHAT BASE AND/XOR LANGUAGE INCLUDES string? DON’T BYTE OF MORE THAN YOU CAN CHEW YOU CAN ONLY DISTORT THE LARGEST OF MATHEMATICS SO FAR SAYING “ABRACADABRA” WITHOUT A MAGIC AND WON’T DO YOU …

ssh: connect to host github.com port 22: Connection timed out

问题描述 本来好好的git push到GitHub突然有一天会卡住&#xff0c;不报错也不提示超时。 查了各种办法&#xff1a; 从ssh改成https&#xff0c;然后发现2021年8月好像停用了https的访问方式&#xff0c;需要生成口令&#xff0c;感觉太麻烦和奇怪就没有解决了。git remote…

Webpack5入门到原理21:提升开发体验

SourceMap 为什么 开发时我们运行的代码是经过 webpack 编译后的&#xff0c;例如下面这个样子&#xff1a; /** ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").* This devtool is neither made for product…

更新Ubuntu并同步网络时间

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;九&#xff09;——更新Ubuntu并同步网络时间 文章目录 Ubuntu系统环境搭建&#xff08;九&#xff09;——更新Ubuntu并同步网络时间1.更新Ubuntu1.1 查看ubuntu版本和详细信息1.2 创建root用户1.3 更…

Webpack5入门到原理19:React 脚手架搭建

开发模式配置 // webpack.dev.js const path require("path"); const ESLintWebpackPlugin require("eslint-webpack-plugin"); const HtmlWebpackPlugin require("html-webpack-plugin"); const ReactRefreshWebpackPlugin require("…

使用 ImportBeanDefinitionRegistrar 向Spring容器中注入Bean

目录 一、如何使用二、优点 一、如何使用 ImportBeanDefinitionRegistrar是Spring提供的一个接口&#xff0c;允许你在运行时动态地注册Bean定义到Spring容器中。通过实现这个接口&#xff0c;你可以在配置类上使用Import注解&#xff0c;并在registerBeanDefinitions方法中自…