我知道,这已经被问了一百万次了……不幸的是。
但是,我正在为 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 是我创建的一个库,其中包含一个名为 syscalls.o 的文件,提供 _exit():
$ arm-none-eabi-nm -s libFW.a | grep _exit
_exit in syscalls.o
00000018 T _exit
在我看来,gcc 试图链接 libg.a 和lots_of_code.o 但还不知道 _exit() 。但奇怪的是:直接链接到 syscalls.o 时它可以正常工作:
$ arm-none-eabi-gcc -Wall lots_of_code.o syscalls.o libFW.a
什么可能导致这种情况?