Keil armcc即使使用--no_rtti_data也会生成typeinfo名称

时间:2018-09-20 20:44:48

标签: c++ keil typeinfo armcc

我在Keil 5.25中使用ARM编译器5(ARMCC)。我正在使用c ++ 11。

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

我在链接器.map文件中查找了它们的地址,发现这些是我的某些lambda的“ typeinfo名称”。

我很确定我不需要此名称并且不使用它们。但是即使使用--no_rtti和--no_rtti_data,编译器仍会生成它们,即使使用--feedback,链接器也不会丢弃它们。

我如何摆脱它们?它们往往占用大量空间。

1 个答案:

答案 0 :(得分:0)

我联系了ARM支持人员,得到的答案(不是确切的报价)是编译器本身存在的问题,并且由于armcc现在受到维护支持,因此不太可能很快得到解决。

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

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