簡體   English   中英

編譯ARM處理器的基本C文件

[英]Compiling basic C file for the ARM processor

我正在使用Yagarto重新編譯GCC工具鏈。 我正在嘗試編譯這個簡單的程序來獲取.elf可執行文件:

int main(void)
{
    return(0);
}

鍵入命令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的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 'collect2:ld返回1退出狀態

我究竟做錯了什么?

Newlib要求您定義_exit符號。 為了使newlib工作,可能還需要提供其他符號: http//sourceware.org/newlib/libc.html#Stubs

這樣的事情應該足夠了(假設你正在為微控制器編譯,當你有一個操作系統時不要這樣做):

.globl _exit
_exit:
    b     . // Loop until reset

或者在C:

void _exit(void) {
    while(1) {
        // Loop until reset
    }
}

順便說一句:您可能想要在旋轉之前禁用中斷。

編輯:也許有點額外的信息。 Yagarto包含Newlib作為libc,它是一個提供printf()malloc()等功能的庫。但是,它不知道如何將字符發送到屏幕或控制台(如果是printf),或者如何退出你調用abort()exit() 因此,Newlib要求您提供一些基本功能的實現,具體取決於您使用的Newlib的功能。

這在很大程度上取決於你正在運行的平台,你正在編譯的平台,你正在使用的工具鏈等等。沒有一個簡單的答案。

也就是說,CodeSourcery(現在的Mentor)做了一個像樣的交鑰匙交叉編譯環境---它只是為你的平台編譯的gcc和glibc,但如果你想輕松設置它仍然是一個好的起點:

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

不幸的是,當Mentor購買CodeSourcery時,他們的下載程序比過去更加困難,現在你必須注冊並通過電子郵件發送給你的鏈接,而不僅僅是下載一些東西,但我還沒有找到一個不那么糟糕的方式得到一個gcc工具鏈。 (建議要......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM