阻止ArmClang将调用添加到标准C库

我正在评估STM32H753上的Keil microvision IDE。

我正在不同优化级别下对ARMCC5和AC6进行编译器比较。 AC6基于Clang。

我的代码未使用memcpy,并且在项目设置中未选中“ Use microLIB”,但是我代码中的基本字节复制字节循环被AC6的memcpy替换(仅在“高”优化级别)。 ARMCC5不会发生这种情况。

我尝试使用编译选项来避免这种情况,如here-ffreestanding-disable-simplify-libcalls所述,无论是在编译器级别还是在链接程序级别,但都没有改变(对于第二个选项,我收到一条错误消息,提示不支持该选项。

在ARMCLANG参考指南中,我发现选项-nostdlib -nostdlibinc阻止(??)编译器使用标准lib的任何功能。

但是我仍然需要math.h函数。

您知道如何防止clang使用标准C Lib中未在代码中明确调用的函数吗?

编辑:这是一个快速且肮脏的可复制示例: https://godbolt.org/z/AX8_WV 请不要讨论这个例子的质量,我知道它很愚蠢!,我知道memset等。。。只是为了了解问题

wuyangzhi 回答:阻止ArmClang将调用添加到标准C库

gcc对memcpy,memset和类似的函数了解很多,甚至被称为“内置函数”。如果您不希望默认使用这些功能,请使用命令行选项-fno-builtin

https://godbolt.org/z/a42m4j

本文链接:https://www.f2er.com/3075611.html

大家都在问