我是微控制器领域的新手。我需要移植一个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
我可以获得一些关于这个错误的帮助,以及如何解决它。而且我也不知道命令行中的那些选项指定了什么。
答案 0 :(得分:55)
在一台计算机/体系结构中使用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
就够了;)
答案 1 :(得分:39)
使用--specs=nosys.specs
:
arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)
参考:
答案 2 :(得分:1)
我有同样的问题。 解决方法如下:
-ffreestanding -flto
添加到编译器调用行中。 -flto -ffreestanding -nostdlib
添加到链接器调用行中。