用arm编译hello world程序C时出错
我正尝试在Linux 64位机器上用C语言编译hello世界程序。 我正在使用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):在函数exit': exit.c:(.text.exit+0x2c): undefined reference to
_exit'/ home / dico / gcc-arm-none的exit': exit.c:(.text.exit+0x2c): undefined reference to
-eabi-4_7-2013q3 / bin中/../ LIB / GCC /臂-NONE-EABI / 4.7.4 /../../../../臂-NONE-EABI / LIB /的libc.a( lib_a-sbrkr.o):函数_sbrk_r': sbrkr.c:(.text._sbrk_r+0x18): undefined reference to
_sbrk'/ 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-writer.o):在函数_write_r': writer.c:(.text._write_r+0x20): undefined reference to
_write'的_write_r': writer.c:(.text._write_r+0x20): undefined reference to
'/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):在函数_close_r': closer.c:(.text._close_r+0x18): undefined reference to
_close'/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-fstatr.o):在函数_fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to
_fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to
_fstat'的_fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to
'/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):In function _isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to
_isatty'/home/dico/gcc _isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to
arm-none _isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to
eabi-4_7-2013q3/bin/../lib/gcc/arm _isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to
none-eabi/4.7.4/../../。 ./../arm-none-eabi/lib/libc.a(lib_a-lseekr.o):In function _lseek_r': lseekr.c:(.text._lseek_r+0x20): undefined reference to
_lseek'/ home /迪科/ GCC-臂-NONE-EABI-4_7-2013q3 / bin中/../ LIB / GCC /臂-NONE-EABI / 4.7.4 /../../../../臂-NONE-EABI /lib/libc.a(lib_a-readr.o):函数_read_r': readr.c:(.text._read_r+0x20): undefined reference to
_read _read_r': readr.c:(.text._read_r+0x20): undefined reference to
'collect2:error:ld返回1退出状态
当我尝试编译时: arm-none-eabi-gcc -c hello.c
,它会创建一个目标代码hello.o
,它告诉我编译器运行正常。
有人可能会告诉我为什么我的汇编会返回这样的错误吗?
UPDATE
我现在意识到C运行时库不包含在编译中。 有谁知道我需要包含在编译中的任何选项,或者如何链接库以便能够使用标准函数(例如printf)?
由于没有控制台,MCU芯片应该如何处理printf字符串? 这就是发生的事情。 libc需要与平台有关的低级函数,不应包含在libc中。
您需要一个retarget.c或syscalls.c文件来定义所有这些缺失的符号,并正确地将printf输出重定向到您可以从芯片外部访问的串行线。
我强烈建议您使用yagarto工具包,它们提供了一个syscall.c文件,其中包含在与libc链接时构建项目所需的内容。
如果你想尝试短路径,请将syscall.c文件包含到你的项目中并重新编程它的函数内部以满足你的需求。
在微控制器世界中将纯粹的gcc工具链与libc链接不适合初学者。 我的建议是始终按照yagarto的教程逐步进行。
链接地址: http://www.djcxy.com/p/86949.html上一篇: Error compiling hello world program C with arm
下一篇: gcc arm