【问题标题】:Can't run GNU ARM Hello world无法运行 GNU ARM Hello world
【发布时间】:2026-02-10 10:35:01
【问题描述】:

我正在尝试学习本教程 http://gnuarmeclipse.livius.net/blog/test-project/

运行 GNU ARM hello world。

我在 Windows 8.1 x64 上使用 eclipse luna。

我已经安装了 GNU ARM 工具链,以及教程说明的所有其他内容。

构建通过,并给出教程中指定的结果

> 02:15:01 **** Build of configuration Debug for project ARMTest4 ****
> make all  Building file: ../src/main.c Invoking: Cross ARM C Compiler
> arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -O0 -fmessage-length=0
> -fsigned-char -ffunction-sections -fdata-sections  -g3 -std=gnu11 -MMD -MP -MF"src/main.d" -MT"src/main.o" -c -o "src/main.o" "../src/main.c" Finished building: ../src/main.c   Building target: ARMTest4.elf
> Invoking: Cross ARM C Linker arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb
> -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -Xlinker --gc-sections -Wl,-Map,"ARMTest4.map" --specs=rdimon.specs -Wl,--start-group -lgcc -lc -lc -lm -lrdimon -Wl,--end-group -o "ARMTest4.elf"  ./src/main.o    Finished building target: ARMTest4.elf   Invoking: Cross ARM GNU Create Flash Image
> arm-none-eabi-objcopy -O ihex "ARMTest4.elf"  "ARMTest4.hex" Finished
> building: ARMTest4.hex   Invoking: Cross ARM GNU Print Size
> arm-none-eabi-size --format=berkeley "ARMTest4.elf"    text      data   
> bss       dec     hex filename    8256       2396     260   10912   
> 2aa0  ARMTest4.elf Finished building: ARMTest4.siz  
> 
> 02:15:06 Build Finished (took 5s.110ms)

然后,我尝试运行,但它失败了,我不知道为什么。它说“错误启动过程”

错误框状态中的详细信息

> Error starting process. Cannot run program
> "C:\Users\Noam\workspace\cpp\ARMTest3\Debug\ARMTest3.elf": Launching
> failed Cannot run program
> "C:\Users\Noam\workspace\cpp\ARMTest3\Debug\ARMTest3.elf": Launching
> failed Cannot run program
> "C:\Users\Noam\workspace\cpp\ARMTest3\Debug\ARMTest3.elf": Launching
> failed

我唯一能想到的就是代码应该在某个模拟器而不是我的 PC 上运行,我不知道该怎么做。 如果这不是问题,请告诉我是什么问题。

我还为 hello world 项目尝试了许多其他配置,但均未成功。

我对工作结果的预期输出:某个控制台对我说“Hello ARM world”。

谢谢。

【问题讨论】:

  • 您无法在 x64 上运行 ARM 可执行文件。我猜你应该有一个可用的 ARM 系统,比如模拟器或树莓派。
  • @wavemode 我认为你应该把它写成答案。
  • 交叉编译的重点是为运行编译器的架构生成不同架构的代码,因此您永远不要期望在主机。如果没有任何东西可以运行,为什么要首先生成 ARM 代码?
  • 我还没有我的芯片。但是还是想开始开发。谢谢。

标签: c arm gnu


【解决方案1】:

您不能在 x64 处理器上运行 ARM 可执行文件。本教程希望您拥有可用的 ARM 系统,例如模拟器或 Raspberry Pi。

【讨论】:

  • 好吧,听起来不错。我如何让模拟器运行?谢谢
  • @Gulzar 我一点也不知道。
【解决方案2】:

我还不能制作 cmets,所以这实际上是对 wavemode 的回答的跟进:

设置模拟器的最快方法是使用(取决于您的平台)VirtualBox 或 QEMU。将 Linux(或其他支持 ARM 二进制文件的操作系统)安装到映像中并从中引导。您需要将二进制文件传输到模拟系统,例如通过 SSH 或 HTTP。

查找 ARM 镜像相对容易,Debian、Fedora、ArchLinux 等都提供预制镜像。

【讨论】:

    【解决方案3】:

    正如其他人所说,GNU ARM 工具旨在针对外部 ARM 微处理器或微控制器,编译后的程序不会在您的工作站上运行。

    有大量来自多家制造商的基于 ARM 的芯片和开发板可与 GNU ARM 工具一起使用,其想法通常是使用嵌入式微控制器创建您自己的系统。该程序需要针对您使用的特定微控制器和电路板进行调整。

    教程不清楚,但教程链接的“先决条件”页面有一个“将设备分配给项目”部分,屏幕截图显示 STM32F4-Discovery/STM32F407VG 圈出 - 我假设作者正在使用那个板子。

    STM32 Discovery 开发板价格低廉(有些不到 20 美元),包括 ST-Link 编程器/调试器和有趣的外围设备供学习。其他制造商通常也有类似的开发板来展示他们的部件。

    【讨论】:

    • 关键是当问题有答案时,Stack Exchange 效果最好。这个问题虽然很老,但却是一个完全有效的问题,没有标记答案,其他答案也不完整或信息丰富。我可能不会帮助@Gulzar,但我可能会帮助其他人。它仍然出现在搜索结果中。我正在寻找类似的词,并多次看到它。老并没有死:我在 2010 年提出的一个问题(如字面上的 today)仍然经常得到支持,并且经常在那个时间范围内的问题中找到解决方案。
    • 但是这个答案并没有给之前的答案添加任何东西
    • 其他答案提到了带有操作系统的模拟器或树莓派(通常也与操作系统一起使用)。它们带有自己的编译器,通常不与单独计算机上的交叉编译器一起使用,并且在学习如何使用 GNU ARM 工具链时不是合适的目标。我的回答确定了所需的硬件类型以及本教程使用的特定板。