64ビットLinuxマシンでCでhelloworldプログラムをコンパイルしています。 GCC ARM組み込みツールチェーンを使用して、ATMELAT91SAM9G20プロセッサを搭載したFOXG20Vボードでプログラムをクロスコンパイルしています。
最初のテイクでは、プログラムが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
ライブラリをアプリケーションにリンクしたのに、なぜプログラムがまだ標準関数を認識しないのか、私にはよくわかりません。誰かがその理由、またはこの問題を解決する方法についての解決策を持っているなら、私は非常に感謝しています。
[〜#〜]更新[〜#〜]
ここ からglibcライブラリをダウンロードしました。 syscalls.c
で見つけたnewlib-2.1.0/libgloss/arm
ライブラリから静的ライブラリをコンパイルして作成しましたが、ライブラリをアプリケーションコードにリンクしても、同じエラーが発生します。
これを実行してみてください:
arm-none-eabi-gcc --specs=rdimon.specs -lgcc -lc -lm -lrdimon -o hello hello.c
あなたのツールキットは、基本的な標準C関数を提供するライブラリであるlibrdimon.aを提供しているようです。