为ARM处理器编译基本C文件
我正在使用GCC工具链的Yagarto重新编译。我试图编译这个简单的程序,以获得一个为ARM处理器编译基本C文件,c,arm,C,Arm,我正在使用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-exit.o): 在函数exit'中: C:\msy
.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-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:
未定义对
\u exit'collect2的引用:ld返回1退出状态
我做错了什么?这在很大程度上取决于您运行的平台、编译的平台、使用的工具链等。没有一个简单的答案 也就是说,CodeSourcery(现在的Mentor)提供了一个不错的交钥匙交叉编译环境——它只是为您的平台编译的gcc和glibc,但如果您想轻松设置,它仍然是一个很好的起点:
不幸的是,当Mentor购买CodeSourcery时,他们使下载过程比以前更加困难,现在你必须注册并获得通过电子邮件发送给你的链接,而不仅仅是下载一些东西,但我还没有找到一种不那么糟糕的方法来获得gcc工具链。(需要建议…Newlib要求您定义退出符号。为了使newlib正常工作,您可能还需要提供其他符号: 这样做就足够了(假设您是为微控制器编译的,当您有操作系统时不要这样做): 或在C中:
void _exit(void) {
while(1) {
// Loop until reset
}
}
顺便说一句:您可能希望在旋转之前禁用中断
编辑:可能需要一些额外的信息。Yagarto将Newlib包含为libc,libc是一个提供函数的库,如
printf()
,malloc()
,等等。但是,它不知道如何将字符发送到屏幕或控制台(在printf的情况下),或者在调用abort()
或exit()
的情况下如何退出。因此,Newlib要求您提供一些基本功能的实现,具体取决于您使用的Newlib的功能。您的构建环境中有可用的ARM标准C库吗?因为你的链接器说“不”,我好像没有。如何在构建环境中获得ARM标准C库?工具链本身始终包含最常用的库。您可能没有正确配置库路径,或者可能需要显式链接库。顺便说一句,return
不起作用,您可以编写return 0代码>
void _exit(void) {
while(1) {
// Loop until reset
}
}