ARM 链接错误“使用 VFP 寄存器参数,main.elf 不”仅在 Windows 8 上?

use*_*638 5 c gcc arm gnu

我正在尝试开始使用 ARM STM32F4 探索板,但在 Windows 8 上使用“GNU 工具”时遇到了一些奇怪的编译错误

目前我的代码很简单:

#include "stm32f4xx_conf.h"

int main(void)
{}
Run Code Online (Sandbox Code Playgroud)

这使用在 Ubuntu 12 和 Windows 7 上完美找到的“make”命令进行编译,但是我在 Windows 8 中收到以下错误。我在所有机器上安装了相同的工具链。

C:/Program Files (x86)/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none- eabi/bin/ld.exe: error C:\Users\MyName\AppData\Local\Temp\cckUTM2f.o users VFP register arguments, main.elf 没有

我已经将这个错误缩小到标志“-mfloat-abi=hard”,当切换到“-mfloat-abi=soft”时,让代码编译,但是这与之前用“-mfloat”编译的其他文件冲突-abi = 硬”。

有谁知道为什么这只会发生在 Windows 8 上以及如何解决它?如果需要更多信息,请告诉我。如果这是一个菜鸟问题,请提前抱歉,因为我对此很陌生!

Rod*_*ell 5

这个答案可能表面上看起来是无关的,但是这个错误信息有一个间接的原因。

首先,“使​​用 VFP 寄存器...”错误消息是由在构建中混合 mfloat-abi=soft 和 mfloat-abi=hard 选项直接引起的。对于要链接的所有对象,此设置必须一致。

此错误的间接原因可能是 Eclipse 编辑器被项目的“.cproject”文件中的错误弄糊涂了。Eclipse 编辑器经常重新调整文件链接,有时在您更改目录结构或文件位置时它会自行中断。这也会影响 gcc 编译器的路径设置 - 对于项目文件的子集。虽然我还不确定究竟是什么导致了这个失败,但用备份副本替换 .cproject 文件为我纠正了这个问题。就我而言,我在添加包含目录路径后注意到 .java.null.pointer 错误。我还发现 gcc 编译器的不同路径被用于工作区本地的一些源,但不是全部。

我将 .cproject 设置与旧副本进行了比较,并观察到导致问题的源条目的差异 - 即使禁用了覆盖项目设置。通过用旧版本替换 .cproject 文件,问题就消失了,我留下这个来提醒发生了什么。


use*_*638 -4

解决方案其实很简单,与工具链安装程序未正确设置 PATH 变量有关。要在 Windows 8 中解决此问题,请转到环境变量 => 系统变量,并将“C:\Program Files (x86)\GNU Tools ARM Embedded\4.8 2014q1\bin”添加到路径变量中。安装程序已将其放在“名称的用户变量”下,但由于永远的原因,它不起作用。