编译ARM处理器的基本C文件

Ran*_*lue 3 c arm

我正在使用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退出状态

我究竟做错了什么?

Bar*_*art 6

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的功能.