我正在使用 GCC 工具链的 Yagarto 重新编译。我正在尝试编译这个简单的程序以获得.elf
可执行文件:
int main(void)
{
return(0);
}
当输入命令时arm-none-eabi-gcc main.c
我收到错误消息
c:/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libc.a(lib_a-退出.o):
功能中exit':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\stdlib/../../../../../newlib-1.19.0/newlib/libc/stdlib/exit.c:65:
undefined reference to
_exit'collect2:ld返回1退出状态
我究竟做错了什么?
Newlib 要求你定义一个_exit
象征。您可能还必须提供其他符号才能使 newlib 工作:http://sourceware.org/newlib/libc.html#Stubs
像这样的事情应该足够了(假设您正在为微控制器进行编译,当您有操作系统时不要这样做):
.globl _exit
_exit:
b . // Loop until reset
Or in C:
void _exit(void) {
while(1) {
// Loop until reset
}
}
顺便说一句:您可能想在旋转之前禁用中断。
编辑:也许有一点额外的信息。 Yagarto 将 Newlib 包含为 libc,这是一个提供以下功能的库printf()
, malloc()
等等。但是,它不知道如何将字符发送到屏幕或控制台(如果是 printf),或者在调用时如何退出abort()
or exit()
。因此,Newlib 要求您提供一些基本功能的实现,具体取决于您使用的 Newlib 功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)