![](/img/trans.png)
[英]file format not recognized; treating as linker script - Compiling c code for arm processor
[英]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.