77

我是微控制器领域的新手。我需要移植一个为 AVR 微控制器编译程序的 IDE,以便为 ARM 微控制器编译程序。我刚刚将编译器从 AVR 替换为 ARM,并按照某人的说法添加了一些选项。以下是命令:

\ARM-GCC\bin\arm-none-eabi-gcc -O0 -ffunction-sections -Wall -std=gnu99 -mfloat-abi=soft 
-Wa,-adhlns="$@.lst" -fmessage-length=0 -mcpu=cortex-m0 -mthumb -g3 -gdwarf-2 -Wl,
--gc-sections -o <Dir_name>\Build_Files\Blink_arm.cpp.elf  <Dir_name>\Build_Files\Blink_arm.cpp.o <Dir_name>\Build_Files\core.a 
-L<Dir_name>\Build_Files -lm 

当我执行它时,我得到以下错误:

tools/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.6.2\libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text+0x18): undefined reference to `_exit'  
collect2: ld returned 1 exit status

我可以就这个错误是什么以及如何解决它获得一些帮助。而且我不知道命令行中的那些选项指定了什么。

4

3 回答 3

98

arm-none-eabi-gcc在一台机器/架构中编译文件以将其加载到 ARM 目标机器中时,会发生这种情况。很可能您没有使用半主机,您想重新定位。

ARM® 编译器工具链 4.1 版表明:

半主机是一种机制,它使运行在 ARM 目标上的代码能够通信并使用运行调试器的主机上的输入/输出工具。

从工具链的 readme.txt (文件夹下.../gcc-arm-none-eabi-VERSION/share/doc/gcc-arm-none-eabi):

** 非半托管/重定向

如果您使用重定向,链接如下: $ arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)

对我来说--specs=nosys.specs就足够了;)

于 2014-05-28T21:31:03.780 回答
74

使用--specs=nosys.specs

arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)

参考:

于 2014-04-26T04:10:18.260 回答
7

我有同样的问题。解决方案如下:

  • 将选项添加-ffreestanding -flto到编译器调用行。
  • 并将选项添加-flto -ffreestanding -nostdlib到链接器调用行中。
于 2018-08-02T15:50:03.017 回答