首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用arm-none-eabi-gcc编译hello world程序c时出错

用arm-none-eabi-gcc编译hello world程序c时出错
EN

Stack Overflow用户
提问于 2014-04-15 11:56:20
回答 1查看 4.8K关注 0票数 3

我正试图在Linux 64位机器上用C语言编译hello world程序。我使用ARM交叉编译器将我的应用程序加载到ARM处理器上。但是,当使用arm-none-eabi-gcc -o hello hello.c编译代码时,我会得到一系列错误:

函数/home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-exit.o):In exit': exit.c:(.text.exit+0x2c): undefined reference to_exit‘/home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7函数.4/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o):In _sbrk_r': sbrkr.c:(.text._sbrk_r+0x18): undefined reference to_sbrk‘_sbrk In函数/home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o):_write_r': writer.c:(.text._write_r+0x20): undefined reference to_write‘_write In function _close_r': closer.c:(.text._close_r+0x18): undefined reference to_close’_write函数arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o):In _fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to_fstat‘/home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-isattyr.o):在函数_isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to_isatty‘_lseek_r': lseekr.c:(.text._lseek_r+0x20): undefined reference to_lseek’/home/dico/gcc-none-eabi-4_7-2013 Q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o):In _read_r': readr.c:(.text._read_r+0x20): undefined reference to_read‘collect2: collect2: ld返回1退出状态

当我尝试通过me:arm-none-eabi-gcc -c hello.c编译时,它会创建一个目标代码hello.o,它告诉我编译器运行良好。

有人能告诉我为什么我的编译是返回这样的错误吗?

更新

我现在意识到编译中没有包含C运行时库。有没有人知道我需要在编译中包括哪些选项,或者如何链接库,以便能够使用诸如printf之类的标准函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 13:12:35

由于没有控制台,MCU芯片应该如何处理printf字符串?这就是正在发生的事。libc需要平台相关的低级函数,不应包含在libc中。

您需要一个重定向程序c或syscalls.c文件来定义所有这些缺失的符号,并正确地将printf输出重定向到从芯片外部访问的串行行。

我强烈建议您使用雅加托工具包,它们提供了一个syscall.c文件,其中包含了在针对libc进行链接时构建项目所必需的内容,就像您正在做的那样。

如果您想尝试短路径,请将syscall.c文件包含到您的项目中,并重新编程其函数内部以满足您的需要。

在微控制器世界中,将裸gcc工具链与libc连接起来并不适合初学者。我的建议是总是一步一步地遵循yagarto的教程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23082990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档