使用arm-none-eabi-gcc编译并链接库liba.a错误

问题描述 投票:9回答:2

我正在64位Linux机器上用C编写一个hello world程序。我正在使用GCC ARM嵌入式工具链在带有ATMEL AT91SAM9G20处理器的FOX G20 V板上交叉编译程序。

首先,由于程序无法识别printf,return等函数(标准C函数),因此在编译时出现了一些错误。因此,我决定通过执行arm-none-eabi-gcc -o hello hello.c libc.a在libc.a库中定义的函数之间建立链接(如果我错了,请纠正我),但结果仍然会导致错误:

libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text.exit+0x16): undefined reference to `_exit'
libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
libc.a(lib_a-writer.o): In function `_write_r':
writer.c:(.text._write_r+0x10): undefined reference to `_write'
libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text._close_r+0xc): undefined reference to `_close'
libc.a(lib_a-fstatr.o): In function `_fstat_r':
fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'
libc.a(lib_a-isattyr.o): In function `_isatty_r':
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'
libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text._read_r+0x10): undefined reference to `_read'
collect2: error: ld returned 1 exit status

我真的不确定为什么即使我已经将库链接到应用程序,程序仍然不能识别标准功能。如果有人对为什么有原因,或者对如何解决此问题有解决方案,我将不胜感激。

UPDATE

我已经从here下载了glibc库。我已经在syscalls.c中找到的newlib-2.1.0/libgloss/arm库中编译并创建了一个静态库,当我将该库链接到我的应用程序代码时,仍然遇到相同的错误。

c linux gcc arm processor
2个回答
15
投票

尝试执行此操作:

arm-none-eabi-gcc --specs=rdimon.specs -lgcc -lc -lm -lrdimon -o hello hello.c

您的工具包似乎提供了librdimon.a,这是一个提供基本标准C函数的库。


0
投票

我收到此错误是因为我的二进制文件无法容纳ROM。

我的第一个错误是:

address 0x34000 of arm_flash.elf section `.mmu_tbl' is not within region `ps7_ram_0`

然后,我得到了相同的未定义参考错误列表。

我需要通过删除new关键字和所有C ++代码中的动态内存分配来减小二进制大小。

© www.soinside.com 2019 - 2024. All rights reserved.