Я знаю, что уже было задано миллион раз ... К сожалению.Связывание требует связывания двух статических libs, которые зависят друг от друга: undefined reference
Но, однако, я работаю над металлическими сборками для процессоров 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 является Lib я создал, содержащий файл с именем 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
Что могло привести к этому?
Вы играли с разными флагами, такими как '-nostdlib',' -nostartfiles' или '-ffreestanding'? – auselen