GCC Linker:如何在输出部分生成每个文件贡献的报告

2024-03-16

最近我在尝试链接我的程序时遇到了一个问题。它报告.text无法放入指定的内存区域。显然,源代码变得太大而无法在有限的内存区域中链接。

我现在要做的是分析哪个文件对“.text”部分贡献最大,以便进行后续代码优化。我尝试了很多方法但没有成功。

  • nm -s output.elf给出每个符号的大小,但不要将符号分组到每个源文件下。
  • nm -s file.obj遍历每个目标文件是行不通的,因为-fdata-section -ffunction-section -Wl已指定,因此并非目标文件中的所有内容都会链接到最终输出
  • readelf -s output.elf提供文件之间的信息,但它只是列出每个文件下的符号及其大小。可以编写一个脚本来计算一个文件下所有大小的总和,但总的值似乎是错误的,这里一个明显的错误是某些符号可能指向相同的内存位置,因此相同的内存区域可能会被计算多次。

当 gcc 链接完成其工作时,它应该知道从目标文件中提取内容并放入输出部分的所有详细信息,但似乎它不提供生成详细报告的开关(或者我遗漏了什么?)

有什么工具可以完成这项工作吗?


Perhaps --gc-sections和...一起--print-gc-sections and/or --print-map-discarded?

如果所有内容都位于单独的部分中,那么您将所有部分作为输入,并列出废弃的部分。然后简单的脚本将生成已使用部分的列表、它们的大小和文件映射。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCC Linker:如何在输出部分生成每个文件贡献的报告 的相关文章

  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • ns_initparse 的链接器错误

    这是代码 include
  • “const”声明是否有助于编译器(GCC)生成更快的代码? [复制]

    这个问题在这里已经有答案了 Do const声明有助于编译器 GCC 生成更快的代码 还是仅对可读性和正确性有用 泽德 肖认为const在 C C 中无用或过度使用 接下来是对 const 的所有奇怪的迷恋 由于某些奇怪的原因 C 喜欢让你
  • 在Python中执行局部标准差

    我试图获取图像每个像素的局部标准差 这意味着对于每个像素 我想计算其值及其邻居值的标准差 我用了this http docs scipy org doc numpy reference routines statistics html图书馆
  • 使用动态链接器包装 glibc 函数

    我正在尝试包装 GLIBCfstat通过将我的库注入可执行文件来实现函数 可以是任何其他 这只是概念证明 我通过将我的库放置在可执行文件的位置来做到这一点RPATH用名字指着libc so 6 我的库的源代码如下 define GNU SO
  • 如何使用 #pragma 在 G++ 中启用优化

    我想在没有命令行参数的情况下启用 g 优化 我知道 GCC 可以通过写来做到这一点 pragma GCC optimize 2 在我的代码中 但它似乎在 G 中不起作用 此页面可能有帮助 http gcc gnu org onlinedoc
  • 警告:c 中指针和整数之间的比较[默认启用]

    我想检查用户输入是否仅包含数字 所以 我使用以下代码 for i 0 argv 1 i NULL i if isdigit argv 1 i printf Error return 1 它工作得很好 但我收到了这个警告 warning co
  • gcc 的 -Wbad-function-cast 的目的是什么?

    根据此处答案的建议 我打开了 Wbad function cast看看我的代码是否有 gcc 可以捕获的任何不良行为 结果出现了这个示例 unsigned long n int crossover int pow n 14 这里并不重要cr
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • 使用 numpy 数组时出现内存错误 Python

    我原来的list 函数有超过 200 万行代码 当我运行计算 的代码时出现内存错误 有什么办法可以绕过它吗 这list 下面是实际 numpy 数组的一部分 熊猫数据 import pandas as pd import math impo
  • 好的 PHP 开源分析/统计软件吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在构建的网址缩短服务需要向用户显示一些基本的点击统计信息 点击次数 转化次数 引用域和国家 地区
  • 查找 div 元素中的所有链接并禁用它们

    假设我有一些如下所示的 HTML 元素 div span a href some link Click me a span div Hello everybody Click a href some link else me a to do
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • c - 将 .data 发送到不同的部分

    我想把其中的符号 data为特定 C 文件生成的节并将它们放在不同的节中 例如 mydata 在最终的可执行文件中 例如 normaldata c char my str this should appear in data special
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 错误:“std::this_thread”尚未声明

    我尝试使用 std this thread sleep for 函数但收到错误 error std this thread has not been declared 包括标志 GLIBCXX USE NANOSLEEP 还需要什么来强制它
  • Python statsmodel.api 逻辑回归 (Logit)

    所以我尝试使用 python 的 statsmodels api 对二进制结果进行逻辑回归进行预测 我按照教程使用 Logit 当我尝试对测试数据集进行预测时 每个记录的输出都是 0 到 1 之间的小数 它不应该给我零和一吗 或者我是否必须
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm

随机推荐

  • CMD 不在 Dockerfile 中的 ENTRYPOINT 之后运行

    所以我有一个 docker 文件 它可以执行以下操作 ENV ENV ENV ENV SERVICE NAME SERVICE NAME USER app ENV HOME home app COPY target home app tar
  • Xcode 4 中的活动构建配置在哪里设置

    我的项目中有 3 个配置 Debug Distribution AdHoc 和 Distribution AppStore 在 Xcode 3 中 我们有一个列表可以在构建和运行之前选择设备 版本 配置和目标 现在 对于 Xcode 4 我
  • 使用正则表达式删除字符之前或之后的空格

    我是正则表达式的新手 我想找到一个很好的解决方案来替换之前或之后的空格 我的子字符串中的 char 我有类似的字符串 Path01 Some folder folder 2 我检查了正则表达式 s s 但这对我来说是不正确的 我必须输入输出
  • 如何在 Tensorflow 2.0 中制作不规则批处理?

    我正在尝试从由一维数值数据张量组成的 Tensorflow 数据集创建数据输入管道 我想创建一批不规则的张量 我不想填充数据 例如 如果我的数据采用以下形式 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 我希望我的数据集由以下
  • JList 的自定义组件而不仅仅是字符串

    我一直在尝试更新我的 Java 知识 并且一直在构建一个小型 GUI 程序 但遇到了一些问题 基本上 我有一个JList我目前正在使用来自我的一个类的对象中的字符串填充该类 该类实现了AbstractListModel我们可以称之为我的It
  • 在 Windows 中将多个文件的前缀重命名或删除为每个文件的编号

    我正在尝试更改当前文件夹中的所有文件名 并且我正在尝试通过删除文件前缀 每个文件都有一个公共前缀 或将其名称更改为其计数 如果有 5 个文件 则文件名将是 1 txt 2 txt 3 txt 4 txt 5 txt 现在我在cmd中找到了r
  • 如何使用jquery一键选中复选框(3)

    这里我有一堆复选框 比如说 如果我单击任何复选框 我也希望选中接下来的两个复选框 即在两个复选框旁边 table border 1 cellspacing 0 width 450 tr td td tr table
  • 无法通过 group_send 向 Django 通道发送消息

    我想使用 Django Channels 通过通道发送消息 我就是这样做的 我首先创建一个消费者 我能够回显收到的消息 但是 无法将消息发送到特定频道 组 class Consumer AsyncJsonWebsocketConsumer
  • 获取Android中虚拟键盘的高度

    如何获取Android中虚拟键盘的高度 是否可以 我尝试从主窗口获取它 但它给了我应用程序的完整高度 但我想得到键盘的高度 您无法获取键盘高度 但可以获取 View 的高度 这是您真正想要的 并且您将获得提供给当前视图的 onLayout
  • PL/SQL 在整个数据库中搜索字符串

    这不仅仅是一个问题 它还是一个信息共享帖子 我今天遇到一个情况我需要在应用程序的整个数据库中寻找一个刺痛 但不知道它属于哪个表 列 下面是我编写并用于帮助我提出建议的 PL SQL 块 希望它能帮助其他有类似需求的人 Declare i N
  • 如何远程访问Spring-boot JMX

    我知道 spring 自动公开 JMX beans 我能够使用 VisualVM 在本地访问它 但是在产品上我如何使用它的 JMX beans 远程连接到应用程序 是否有默认端口或者我应该另外定义什么 谢谢 射线 默认情况下 JMX 可在本
  • -m32 选项不适用于 gcc,但适用于 g++

    我试图在 x86 64 ubuntu 12 04 机器上编译 32 位目标的应用程序 我使用安装了所需的包 sudo apt get install gcc multilib g multilib libc6 i386 libc6 dev
  • 错误:安装 ruby​​-debug-ide

    事实上 我是 ruby on Rails 开发的新手 并不是说我无法在 aptana studio 3 上安装 gem install ruby debug ide gem install ruby debug ide Temporaril
  • 声纳:“关闭这个PreparedStatement”

    Why is 声纳Qube http docs sonarqube org 如果我在finally块中关闭它 Jenkins的插件会抱怨打开的语句 我需要在单独的函数中验证数据库连接 final String PING SELECT 1 f
  • Hamcrest Matchers 包含匹配器列表

    我正在尝试使用org hamcrest Matchers contains java util List gt http hamcrest org JavaHamcrest javadoc 1 3 org hamcrest Matchers
  • 以编程方式将 UILabels 和 UIImageViews 添加到 UIScrollView

    我知道这个问题在这里经常出现 但我似乎仍然无法让它发挥作用 我可能没有正确启动视图或其他 无论如何 我正在尝试以编程方式向 UIScrollView 添加多个标签和图像 这是我的 h 文件的代码 import
  • ggplot2 中缺少功能区

    我似乎在 ggplot2 中设置功能区显示时遇到问题 这是一个组成的数据集 Estimate lt c 100 125 150 175 GlobalDFData lt data frame Estimate Upper Estimate 2
  • JavaScript 大括号参数作为函数参数[重复]

    这个问题在这里已经有答案了 我对 javascript 不太熟悉 并且有一个关于函数参数周围使用大括号的问题 因为它不是 JSON 结构 我正在学习核js 我找到了一些代码作为示例 但我不太明白 为什么 产品 在大括号中 addToCart
  • 串行执行单元测试(而不是并行)

    我正在尝试对我编写的 WCF 主机管理引擎进行单元测试 该引擎基本上根据配置动态创建 ServiceHost 实例 这使我们能够动态地重新配置哪些服务可用 而无需在添加新服务或删除旧服务时关闭所有服务并重新启动它们 然而 由于 Servic
  • GCC Linker:如何在输出部分生成每个文件贡献的报告

    最近我在尝试链接我的程序时遇到了一个问题 它报告 text无法放入指定的内存区域 显然 源代码变得太大而无法在有限的内存区域中链接 我现在要做的是分析哪个文件对 text 部分贡献最大 以便进行后续代码优化 我尝试了很多方法但没有成功 nm