即使使用 --no_rtti_data,Keil armcc 也会生成类型信息名称

Keil armcc generates typeinfo names even with --no_rtti_data

我在 Keil 5.25 中使用 ARM Compiler 5 (ARMCC)。我正在使用 c++11.

我正在使用带有 std::function 的自制模拟的 c++11(因为 armcc 提供的 STL 中没有 std::function)。 最近我注意到我的二进制文件包含几个看起来很奇怪的字符串,例如 N8callback14DelegateLambdaIZN5tasks13BatteryTask_t6worker 等等。

我在链接器 .map 文件中查找了它们的地址,发现这些是 "typeinfo names" 用于我的一些 lambda。

我很确定我不需要这些名字,也不会使用它们。但是即使使用 --no_rtti 和 --no_rtti_data 编译器仍然会生成它们,并且即使使用 --feedback.

链接器也不会丢弃它们

我怎样才能摆脱它们?他们往往需要相当多的 space.

我联系了 ARM 支持并得到了答案(不是确切的引用),这是编译器本身的问题,并且由于 armcc 现在处于维护支持之下,因此不太可能很快得到修复。

作为解决方法,他们建议使用编译器选项 --no_vfe,但这会导致代码大小增加(在我的情况下根本不起作用)。

为了更好地支持 c++11,建议迁移到 armclang。