如何调试 STL/C++ 的 GCC/LD 链接过程

2024-04-09

我正在用 C++ 开发裸机 cortex-M3,以获取乐趣和利润。我使用 STL 库,因为我需要一些容器。我认为通过简单地提供我的分配器,它不会向最终的二进制文件添加太多代码,因为您只得到您使用的内容。

实际上我根本没想到与 STL 有任何链接过程 (给出我的分配器),因为我认为这都是模板代码。

我正在编译-fno-exception顺便一提。

不幸的是,我的二进制文件中添加了大约 600KB 或更多。我用 nm 查找了最终二进制文件中包含哪些符号,这对我来说似乎是一个笑话。这个列表太长了,我不会尝试跳过它。虽然有一些弱符号。

我还查看了链接器生成的 .map 文件,甚至找到了 scanf 符号

.text
0x000158bc       0x30   /CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/usr/lib/libc.a(sscanf.o)
0x000158bc                __sscanf
0x000158bc                sscanf
0x000158bc                _IO_sscanf

And:

$ arm-none-linux-gnueabi-nm binary | grep scanf
000158bc T _IO_sscanf
0003e5f4 T _IO_vfscanf
0003e5f4 T _IO_vfscanf_internal
000164a8 T _IO_vsscanf
00046814 T ___vfscanf
000158bc T __sscanf
00046814 T __vfscanf
000164a8 W __vsscanf
000158bc T sscanf
00046814 W vfscanf
000164a8 W vsscanf

我该如何调试这个?首先,我想了解 GCC 到底使用什么来进行链接(我通过 GCC 进行链接)。我知道如果在文本段中找到符号, 使用了整个段,但仍然太多了。

任何有关如何解决此问题的建议将不胜感激。

Thanks


使用 GCC-v and -Wl,-v选项将显示正在使用的链接器命令(以及链接器的版本信息)。

您使用的是哪个版本的 GCC?我对 GCC 4.6 做了一些更改(请参阅PR 44647 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44647 and PR 43863 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43863)以减少代码大小以帮助嵌入式系统。还有一个未完成的增强请求(PR 43852 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43852)以允许禁用您所看到的 IO 符号的包含 - 其中一些来自详细终止处理程序,当进程因活动异常而终止时,该处理程序会打印一条消息。如果您不使用执行,那么其中一些代码对您来说是无用的。

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

如何调试 STL/C++ 的 GCC/LD 链接过程 的相关文章

  • 如何在 wpf 密码框设置一些默认文本? [复制]

    这个问题在这里已经有答案了 可能的重复 WPF 中的水印文本框 https stackoverflow com questions 833943 watermark textbox in wpf 我可以知道如何在 WPF 的密码框中放入一些
  • 实现 `memcpy()`:需要 `unsigned char *`,还是只需要 `char *`?

    我正在实施一个版本memcpy 能够与它一起使用volatile 使用安全吗char 或者我需要unsigned char volatile void memcpy v volatile void dest const volatile v
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • 将 MyGeneration 与 Fluent NHibernate 结合使用

    我在这里找到了一个使用 MyGeneration 生成 NHibernate 代码的绝佳模板 http vucetica blogspot com 2009 01 nhibernate template for my Generation
  • Qml 中的 FileDialog 在发布中不起作用

    我正在与以下项目合作Qt Quick Control 2 当我尝试在调试模式下运行软件时 FileDialog qml 可以完美打开 但是当我将其部署为发布模式时 它无法工作 这是我的代码 import QtQuick 2 4 import
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • EWS 消息跟踪报告

    我一直在研究如何使用 EWS 从交换中获取消息跟踪报告 但似乎无法查明任何内容 我打算构建一个抓取日志文件的应用程序 但如果我可以通过 EWS 来完成它 那对我正在做的事情会更好 有任何想法吗 我终于能够为我的问题创建一个解决方案 我在 C
  • JObject ToString 与 StringEnumConverter 不起作用

    我正在尝试序列化一个匿名类 如下所示 public enum ErrorCode A B C var response JObject FromObject new Error new Message Test Code ErrorCode
  • 这个对象的内存会是什么样子?

    我想知道这个类 它的对象 的内存布局是什么样的 class MyClass string myString int myInt public MyClass string str int i myString str myInt i MyC
  • 如何存储生成的格式化 C 字符串

    这是一个新手问题 为了创建格式化的 C 字符串 我使用printf like int n 10 printf My number is i 10 但是 怎么样 int n 10 char msg My number is i 10 prin
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 如何获取 TFS 2013 中所有用户的列表

    我正在使用 Team Foundation Server TFS 2013 和 Visual studio 2012 我需要 TFS 中所有用户的列表 有没有办法使用C 获取TFS中的所有用户 从TFS 2010获取用户列表 您可以尝试使用
  • 验证仅适用于数组的第一项

    给定这个模型代码 Required Display Name Name public string Name get set 以下查看代码有效 Html LabelFor model gt model Name Html TextBoxFo
  • 拦截C# HttpClient GetAsync

    我有一个 Web 项目 C MVC5 但没有 WebAPI 和一个简单的 HTTP REST 客户端 该客户端调用外部 REST 服务并获取 accessToken 等 我想检查所有 Get PostAsync 调用对 statusCode
  • 使用本地系统帐户运行时,GetAccessControl 方法失败,出现意外错误代码 3

    我已经创建了 Windows 服务并使用本地系统帐户运行它 该服务正在读取用户文件并查找其所有者 在获取文件的访问权限以查找所有者时 它抛出以下异常 方法失败 出现意外错误代码 3 StackTrace 在 System Security
  • OpenMP 动态调度与引导调度

    我正在研究 OpenMP 的调度 特别是不同的类型 我了解每种类型的一般行为 但澄清一下何时进行选择会很有帮助dynamic and guided调度 英特尔的文档 https software intel com en us articl
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • 如何让c代码执行hex机器代码?

    我想要一个简单的 C 方法能够在 Linux 64 位机器上运行十六进制字节码 这是我的 C 程序 char code x48 x31 xc0 include
  • 在.Net中使用ObjectCache缓存对象并设置过期时间

    我陷入了一个场景 我的代码如下 更新 它不是关于如何使用数据缓存 我已经在使用它及其工作 它是关于扩展它 以便该方法在到期时间和从外部源获取新数据之间不会进行调用 object string this GetDataFromCache ca

随机推荐

  • Android 指纹删除后密钥失效

    我正在 7 1 1 上的 Google Pixel 设备上进行测试 发现从设备中删除所有指纹后 我的私钥并未失效 我已经根据演示应用程序使用单个对称 SecretKey 进行了测试 并且按预期工作 但是使用非对称密钥对只会引发KeyPerm
  • React Hooks:用于模式事件监听器的 useEffect

    我有一个模式对话框 如果用户在模式之外单击 我想关闭该对话框 我编写了以下 useEffect 代码 但遇到了以下问题 模式对话框包含许多子项 React Nodes 这些子项可能会发生变化 例如 用户删除列表中的条目 这些交互触发我的 o
  • 滑动动画存在多个视图同步问题

    我正在尝试用两个文本视图制作动画 两者都处于相对布局中 动画的功能是左文本视图会向左移动一点 同时右文本视图也会向左移动一点 我努力了 http nineoldandroids com http nineoldandroids com an
  • 发布配置文件未在 TFS Build 上部署

    我在 VS2012 中有一个 net4 解决方案 它有一个带有自己的发布配置文件的网站 当从 VS 中执行时 配置文件成功通过 webdeploy 发布 但当使用 TFS2012 构建时 它似乎被忽略 我将这些 MSBuild 参数传递到构
  • 如何在IOS中制作月亮绕地球旋转并同时自己旋转的CAAnimation效果?

    我知道在IOS中创建月亮绕地球转的效果很简单 假设月球是一个 CALayer 对象 只需将该对象的锚点更改为地球 它就会以动画方式围绕地球旋转 但如何创造出同时自转的月亮呢 由于月亮只能有一个锚点 看来我无法再让这个 CALayer 对象自
  • ViewPager Fragment 再次重新加载时消失

    以下是布局 test xml
  • 如何检查线段和从与水平面成一定角度的点发出的线射线之间的交点?

    给定一条线段 即两个点 x1 y1 和 x2 y2 一个点 P x y 和一个角度 theta 我们如何判断这条线段和从 P 发出的 与水平方向成 角的线射线是否相交 如果它们相交 如何找到交点 我们来标记点q x1 y1 and q s
  • 替换现有的 Outlook 日历约会

    我正在与icalndar约会一代做一些工作 这将允许代表查看活动的网站并单击提供的链接将约会添加到他们的日历中 我有一个工作程序集 它将根据一组已知的信息 开始日期 结束日期 标题等 生成 ics 格式的输出 作为物理文件或流 我为日历约会
  • 方法声明应与 PHP 中的父方法兼容

    Strict Standards Declaration of childClass customMethod should be compatible with that of parentClass customMethod PHP 中
  • 避免 InvalidOperationException 的最佳实践:集合已修改?

    很多时候我需要这样的东西 foreach Line line in lines if line FullfilsCertainConditions lines Remove line 这不起作用 因为我总是得到一个InvalidOperat
  • Highcharts 系列更新动画

    我可以使用此方法更新蜘蛛图的数据值并查看其动画 chart series i setData newSeries i data 但是 由于蜘蛛图中的系列不仅包括data还有其他领域 例如 series name Allocated Budg
  • 如何在容器内放置旋转图像?

    使用 CSS3 HTML 如果需要的话还可以使用 javascript jquery 我需要将图像旋转 90 270 度并使其位置填充其父 div 容器 听起来很简单 但是当图像旋转时 位置会发生变化 我不知道如何或为什么 这是一个 jsF
  • 仅当某个字符不直接跟在另一个特定字符之后时才拆分该字符串

    我有以下代码行来分割字符串data2出现空白实例时进入列表 string list data2 split 但是 在我的一些数据中 日期格式为 28 Dec 这里 上面的代码在我不希望的情况下在日期和月份之间的空白处进行了分割 有没有办法我
  • Haskell 中的融合是什么?

    我时不时地注意到 Haskell 文档中的以下内容 例如在Data Text https hackage haskell org package text 1 2 2 1 docs Data Text html 受融合影响 What is
  • Ruby 是否有与未定义实例变量等效的 method_missing ?

    当我调用一个不存在的方法时 method missing会告诉我方法的名称 当我尝试访问尚未设置的变量时 该值只是nil 我试图动态拦截对 nil 实例变量的访问 并根据正在访问的变量的名称返回一个值 最接近的等价物是 PHP 的 get
  • J2ME - 使用 javax.microedition.amms.control.camera.CameraControl;是否可以禁用快门声音?

    在我的黑莓应用程序中 我已经实现了相机 并希望用我自己的声音替换默认的快门声音 我想我可以通过使用方法enableShutterFeedback false 来静音默认相机声音 然后播放我自己的声音 或者在相机激活之前立即播放我的声音来做到
  • Kotlin 中的 crossinline 和 noinline 有什么区别?

    这段代码编译时有警告 性能影响微不足道 inline fun test noinline f gt Unit thread block f 这段代码不编译 非法使用内联参数 inline fun test crossinline f gt
  • 使用 AutoSize=false 防止标签中自动换行

    当标签控件的自动大小设置为 false 时 如何防止设计器模式下 Label 控件中的自动换行 基本上我想在设计器模式下自由移动和调整标签大小 但其文本应始终位于一行 如果需要则剪切 谢谢你的帮助 你想阻止它吗only在设计器模式还是在运行
  • TypeScript 中变量后面的感叹号是什么意思? [复制]

    这个问题在这里已经有答案了 我在一些 React TypeScript 实现中看到过 例如 ref ref gt this container ref 里面的感叹号是什么意思ref 这是 TypeScript 中的特定内容 还是新的标准 J
  • 如何调试 STL/C++ 的 GCC/LD 链接过程

    我正在用 C 开发裸机 cortex M3 以获取乐趣和利润 我使用 STL 库 因为我需要一些容器 我认为通过简单地提供我的分配器 它不会向最终的二进制文件添加太多代码 因为您只得到您使用的内容 实际上我根本没想到与 STL 有任何链接过