exit.c :(.text + 0x18):使用arm-none-eabi-gcc时未定义引用`_exit'

Sha*_*h U 42 gcc arm

我是微控制器领域的新手.我需要移植一个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 
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

Yek*_*eke 65

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够了;)


小智 44

用途--specs=nosys.specs:

arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)
Run Code Online (Sandbox Code Playgroud)

参考:

  • 感谢日志。imo,应该接受此评论作为正确答案。 (2认同)
  • 如果阅读本文的人有足够的代表进行 1 个字符的编辑,现在有一个 https 版本的“ARM 选项”URL。 (2认同)

小智 6

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

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