【发布时间】:2013-10-25 12:48:16
【问题描述】:
我是微控制器领域的新手。我需要移植一个为 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
我可以就这个错误是什么以及如何解决它获得一些帮助。而且我不知道命令行中的那些选项指定了什么。
【问题讨论】:
-
在您的 ARM libc(与您的编译器捆绑在一起)中,
exit()函数调用了未在任何库中定义的_exit()。您的编译器必须设置不正确,尽管您可以通过自己定义void _exit(int status)来执行快速修复(注意:这将不起作用,因为您的 libc 声明 _exit() 具有不同的签名。您的_exit()可以简单地停止无限循环,就像它的 AVR 对应物一样。修复您的 GCC 安装是值得推荐的选择。 -
见:newlib syscalls;如果没有为您的董事会实施,您需要实施这些。此外,您的代码可能存在问题。 Newlib 不支持一切。请参阅Gatliff's newlib 概述。