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

时间:2014-04-17 02:14:58

标签: c gcc arm gnu

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

目前我的代码非常简单:

#include "stm32f4xx_conf.h"

int main(void)
{}

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

  

C:/ Program Files(x86)/ codesourcery / sourcery g ++   精简版/ bin中/../ lib中/ GCC / ARM-NONE-EABI / 4.5.1 /../../../../臂无 - EABI /斌/ ld.exe:   错误C:\ Users \ MyName \ AppData \ Local \ Temp \ cckUTM2f.o用户VFP寄存器   参数,main.elf不

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

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

2 个答案:

答案 0 :(得分:1)

此答案可能在表面上显示为无关,但此错误消息存在间接原因。

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

此错误的间接原因可能是由于Eclipse编辑器对项目的“.cproject”文件中的错误感到困惑。 Eclipse编辑器经常重新调用文件链接,有时当您更改目录结构或文件位置时,它会自行中断。这也会影响gcc编译器的路径设置 - 对于项目文件的子集。虽然我还不确定是什么原因造成这种失败,但用备份副本替换.cproject文件可以解决这个问题。在我的情况下,我在添加包含目录路径后发现了.java.null.pointer错误。我还发现gcc编译器的不同路径被用于工作空间本地的一些源,但不是全部。由于未知原因,两个gcc编译器使用了不同的浮点设置 - 因此VFP寄存器错误。

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

答案 1 :(得分:0)

解决方案实际上非常简单,它与工具链安装程序未正确设置的PATH变量有关。要在Windows 8中解决它,请转到Environment Variables =>系统变量和我在路径变量中添加了“C:\ Program Files(x86)\ GNU Tools ARM Embedded \ 4.8 2014q1 \ bin”。安装程序已将其置于“名称的用户变量”下,并且永远不会起作用。