防止 ArmClang 添加对标准 C 库的调用
Prevent ArmClang to add calls to Standard C library
我正在 STM32H753 上评估 Keil Microvision IDE。
我正在对不同优化级别的 ARMCC5 和 AC6 进行编译器比较。 AC6 基于 Clang.
我的代码没有使用 memcpy,我在项目设置中取消选中 "Use MicroLIB",但是我的代码中的基本字节复制循环被替换为 AC6 的 memcpy(仅在 "high" 优化级别)。 ARMCC5 不会发生这种情况。
我尝试使用编译选项来避免这种情况,如 here 所述:-ffreestanding
和 -disable-simplify-libcalls
,在编译器和链接器级别,但它没有改变(第二次选项,我收到一条错误消息,指出不支持该选项)。
在 ARMCLANG 参考指南中,我找到了阻止 (??) 编译器使用标准库的任何函数的选项 -nostdlib -nostdlibinc
。
但是我仍然需要 math.h
功能。
您知道如何防止 clang 使用标准 C 库中未在代码中显式调用的函数吗?
编辑:这是一个快速而肮脏的可重现示例:
https://godbolt.org/z/AX8_WV
请不要讨论这个例子的质量,我知道它是愚蠢的!!,我知道 memset 等...只是为了理解问题
gcc 知道很多关于 memcpy、memset 和类似的函数,甚至它们被称为 "the builtin functions"。如果您不想默认使用这些功能,只需使用命令行选项 -fno-builtin
我正在 STM32H753 上评估 Keil Microvision IDE。
我正在对不同优化级别的 ARMCC5 和 AC6 进行编译器比较。 AC6 基于 Clang.
我的代码没有使用 memcpy,我在项目设置中取消选中 "Use MicroLIB",但是我的代码中的基本字节复制循环被替换为 AC6 的 memcpy(仅在 "high" 优化级别)。 ARMCC5 不会发生这种情况。
我尝试使用编译选项来避免这种情况,如 here 所述:-ffreestanding
和 -disable-simplify-libcalls
,在编译器和链接器级别,但它没有改变(第二次选项,我收到一条错误消息,指出不支持该选项)。
在 ARMCLANG 参考指南中,我找到了阻止 (??) 编译器使用标准库的任何函数的选项 -nostdlib -nostdlibinc
。
但是我仍然需要 math.h
功能。
您知道如何防止 clang 使用标准 C 库中未在代码中显式调用的函数吗?
编辑:这是一个快速而肮脏的可重现示例: https://godbolt.org/z/AX8_WV 请不要讨论这个例子的质量,我知道它是愚蠢的!!,我知道 memset 等...只是为了理解问题
gcc 知道很多关于 memcpy、memset 和类似的函数,甚至它们被称为 "the builtin functions"。如果您不想默认使用这些功能,只需使用命令行选项 -fno-builtin