我正在使用Yagarto重新编译GCC工具链.我正在尝试编译这个简单的程序来获取.elf可执行文件:
int main(void)
{
return(0);
}
Run Code Online (Sandbox Code Playgroud)
键入命令时,arm-none-eabi-gcc main.c我收到错误消息
C:/ yagarto/bin中/../ LIB/GCC /臂-NONE-EABI/4.6.2 /../../../../臂-NONE-EABI/LIB \的libc.a(lib_a- exit.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'colle2:ld返回1退出状态
我究竟做错了什么?
Newlib要求您定义_exit符号.为了使newlib工作,可能还需要提供其他符号:http://sourceware.org/newlib/libc.html#Stubs
这样的事情应该足够了(假设你正在为微控制器编译,当你有一个操作系统时不要这样做):
.globl _exit
_exit:
b . // Loop until reset
Run Code Online (Sandbox Code Playgroud)
或者在C:
void _exit(void) {
while(1) {
// Loop until reset
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:您可能想要在旋转之前禁用中断.
编辑:也许有点额外的信息.Yagarto包括Newlib为libc的,这是提供诸如函数库printf(),malloc()等等.但是,它无法知道如何将一个字符发送到屏幕或控制台(printf中的情况下),或如何退出的情况下,你打电话abort()或exit().因此,Newlib要求您提供一些基本功能的实现,具体取决于您使用的Newlib的功能.