c - ARM 链接错误 "Uses VFP register arguments, main.elf does not"仅在 Windows 8 上?

标签 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++ 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 does not



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

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

最佳答案

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

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

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

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

关于c - ARM 链接错误 "Uses VFP register arguments, main.elf does not"仅在 Windows 8 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123431/

相关文章:

c - 在Y86汇编中如何为多个数组分配好空间?

android - 构建独立库

gcc - 如何使用 ARM 的 OpenMAX 开发层 (DL) 进行构建和解码

c++ - 如何调整 std::vector<std::queue<std::unique_ptr<int>>> 的大小?

gcc - 如何生成未对齐的访问条件以及如何使用 gcc 检测它?

gcc - 为什么 "strip"不删除这些调试符号?

c - 从命令行定义全局数组的大小

objective-c - 子类中 BOOL 上的 "Subscripted value is neither array nor pointer"错误

c++ - 带变量的 GCC 内联 ASM

c - 如何将 libc_nano 与 Clang 一起使用?