我正在STM32H753上对Keil微视觉IDE进行评估。
我正在做ARMCC5和AC6在不同优化级别上的编译器比较。AC6是基于Clang的。
我的代码没有使用memcpy,而且在项目设置中没有选中"Use MicroLIB“,但是我的代码中的每字节复制循环中的基本字节替换为带有AC6的memcpy (仅在”高“优化级别中)。这种情况不会发生在ARMCC5身上。
我试着使用编译选项来避免这种情况,正如here:-ffreestanding和-disable-simplify-libcalls所描述的那样,在编译器和链接器级别都没有改变(对于第二个选项,我收到一条错误消息,表示不支持该选项)。
在ARMCLANG参考指南中,我找到了防止(??)的选项-nostdlib -nostdlibinc。编译器使用任何函数的标准库。
但是,我仍然需要math.h函数。
您知道如何防止clang使用来自标准C语言库的函数,这些函数不是在代码中明确调用的?
编辑:这里是一个快速和肮脏的可复制的例子:https://godbolt.org/z/AX8_WV请不要讨论这个例子的质量,我知道它是愚蠢的!这只是为了理解这个问题
发布于 2019-11-21 13:43:48
gcc对memcpy、memset和类似的函数非常了解,甚至被称为“内建函数”。如果您不希望默认使用这些函数,只需使用命令行选项-fno-builtin
https://stackoverflow.com/questions/58928604
复制相似问题