Gcc 关于VPF寄存器的链接时间警告

Gcc 关于VPF寄存器的链接时间警告,gcc,arm,cortex-m,Gcc,Arm,Cortex M,我正在尝试用硬件浮点扩展将一个项目从Cortex M0移植到Cortex M4,新的目标是soc 我从链接器中得到的错误如下 arm-unknown-eabi/bin/ld: error: x.o uses VFP register arguments, firmware does not 其中firmware是链接器输出文件的名称 这是用于浮点的arm ABI的一个问题,我想使用FPU,因为它是由 我想使用的FreeRTOS端口,但我不知道如何调整链接器标志使之成为可能 这是我当前使用的链接

我正在尝试用硬件浮点扩展将一个项目从Cortex M0移植到Cortex M4,新的目标是soc

我从链接器中得到的错误如下

arm-unknown-eabi/bin/ld: error: x.o uses VFP register arguments, firmware does not
其中firmware是链接器输出文件的名称

这是用于浮点的arm ABI的一个问题,我想使用FPU,因为它是由 我想使用的FreeRTOS端口,但我不知道如何调整链接器标志使之成为可能

这是我当前使用的链接器标志集

-L/path/to/nrfx/mdk
-Wl, --no-undefined
-Wl,--as-needed -march=armv7e-m+fp -mthumb -mfloat-abi=hard -mabi=aapcs
-Wl, --start-group support/libs/libQRCode.a support/libs/libSPIFFS.a
-Wl, --no-undefined
-Wl, --as-needed
-Wl, --gc-sections --specs=nosys.specs -T/path/to/linker_script.ld /toolchain/path/to/lib/libm.a
-Wl, --end-group

-mfloat abi
标志是一个仅限编译器的标志,因此将其传递给链接器没有意义


为了能够构建使用硬浮点ABI的固件映像,必须编译传递给链接器的所有对象文件以使用该ABI。您的问题很可能是由于您正在向链接器传递一个或多个使用软浮点ABI编译的对象文件;例如,链接器命令行中的
/toolchain/path/to/lib/libm.a
文件路径看起来可疑,您应该使用libm.a的硬浮动版本,您可能会在工具链库路径的
hard/
子文件夹中找到它。

感谢您的回答和关于在哪里可以找到libm.a的硬浮动版本的提示;现在我无法确认这是原因,但当我能够重新编译硬浮动的工具链时,我将确认我重新编译的工具链支持multilib,错误消失了,我不确定GCC是否会自动决定使用哪个
libm.a
,但我只在
/opt/toolchain/arm none eabi/arm none eabi/lib/libm.a
下看到一个,而libgcc中有多个硬变量和软变量目录。