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

标签 c linux gcc arm processor

我正在 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

我真的不确定为什么即使我已经将库链接到应用程序,程序仍然无法识别标准函数。如果有人知道原因或解决此问题的方法,我将不胜感激。

更新

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

最佳答案

尝试执行这个:

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

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

关于使用arm-none-eabi-gcc编译和链接库liba.a报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23102500/

相关文章:

c - 在 64 位平台上取消引用整数指针

ruby - RHEL 5.3 的最新 redhat 支持的 ruby​​ 版本?

c++ - 如何在没有编译器的情况下在 Linux 上安装 gcc

c - gcc 使用 -Os 生成大小为 0 的二进制文件

C、每个单词都换行

c - 如何防止gcc优化破坏rep movsb代码?

c - 函数尾声何时执行?

python-3.x - 无法从 Python 代码连接到 Cassandra

Python 系统.argv[1 :] not picking up command line options

c++ - 调试器看到的输出线程 ID