C: (. text + 0 x18) : 在使用 arm-none-eabi-gcc 时对‘_exit’的未定义引用

我是微控制器领域的新手。我需要移植一个 IDE,为 AVR 微控制器编译程序,为 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

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

81649 次浏览

使用 --specs=nosys.specs:

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

参考文献:

当在一台机器/体系结构中用 arm-none-eabi-gcc编译一个文件以便在 ARM 目标机器中加载它时,就会发生这种情况。最有可能的情况是,你没有使用半主机,你想重新定位。

ARM 编译器工具链4.1版指出:

半主机是一种机制,使运行在 ARM 目标上的代码通信和 在运行调试器的主机上使用 Input/Output 工具。

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

非半主机/重定位目标

如果你使用 retarget,链接如下: $arm-none-eabi-gcc —— specs = nosys.specs $(OTHER _ LINK _ OPTION)

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

我也有同样的问题。 解决办法如下:

  • 在编译器调用行中添加选项 -ffreestanding -flto
  • 并将选项 -flto -ffreestanding -nostdlib添加到链接器呼叫线路中。