即使使用 --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。
我在 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。