柴库柴库 发表于 2025-7-1 13:16

将 main.c 改为 cpp 会向二进制文件添加浮点例程并增加体积

使用 STM32CubeIDE 创建的 STM32F091 项目,所有驱动都使用 LL 库。最初我使用的是 Cube 生成的项目结构及其生成的 main.c 文件。为了减小二进制文件大小,我将原本包含大量重复 GPIO 初始化代码的大型 GPIO 初始化函数,改为了使用一个紧凑的 const 结构体数组来存储 GPIO 和初始化信息,并通过一个小循环代码块来完成配置。使用了一些自己的辅助库头文件,其中大量依赖 constexpr 关键字进行编译时计算和“打包”操作。为此,我将 main.c 改为了 main.cpp,即用 C++ 编译它。除了这个没有对项目做任何其他修改,也没有添加任何涉及浮点数等的计算。但现在二进制文件不仅没有变小,反而大了约 10KB,其中 7KB 来自 .text 段中新增的内容:text


复制


下载





__aeabi_dsub__aeabi_dadd__aeabi_ddiv__aeabi_dmul__ieee754_log
无法解释为什么现在会出现这种情况。查看 .map 文件,没看到是什么在使用它们。这是啥情况呢

probedog 发表于 2025-7-1 15:49

强制禁用浮点支持。

probedog 发表于 2025-7-1 15:50

强制禁用浮点支持。

powerantone 发表于 2025-7-1 18:51

用extern "C"包裹C库,避免C++名称修饰导致链接到意外版本。

flycamelaaa 发表于 2025-7-1 19:51

禁用异常和RTTI如果不需要。

stormwind123 发表于 2025-7-1 19:53

最小化标准库依赖。

jcky001 发表于 2025-7-1 20:54

精简库依赖。

cr315 发表于 2025-7-1 22:55

显式控制编译链接过程,避免隐式依赖。如果项目无需C++特性,建议保留.c后缀以获得更小体积。
页: [1]
查看完整版本: 将 main.c 改为 cpp 会向二进制文件添加浮点例程并增加体积