我正在评估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等。。。只是为了了解问题