私は知っています、それはすでに何百万回も尋ねられました... 残念ながら。
しかし、私は ARM Cortex M4 プロセッサのメタル ビルドに取り組んでいます。したがって、共有ライブラリはなく、静的なものだけです。プログラムを gcc とリンクすると、次のエラーがスローされます。
$ arm-none-eabi-gcc -Wall lots_of_code.o libFW.a
arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/armv7e-m/fpu/libg.a(lib_a-exit.o):
In function `exit':
exit.c:(.text.exit+0x16): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
libFW.a は、_exit() を提供する syscalls.o というファイルを含む、私が作成したライブラリです。
$ arm-none-eabi-nm -s libFW.a | grep _exit
_exit in syscalls.o
00000018 T _exit
gcc は libg.a と lot_of_code.o をリンクしようとしているようですが、_exit() についてはまだ知りません。しかし、奇妙なことは次のとおりです。syscalls.o に直接リンクすると、正しく動作します。
$ arm-none-eabi-gcc -Wall lots_of_code.o syscalls.o libFW.a
何が原因でしょうか?