【发布时间】:2013-12-21 19:45:47
【问题描述】:
我知道,这已经被问了一百万次了……不幸的是。
但是,我正在为 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
这是什么原因造成的?
【问题讨论】:
-
你玩过
-nostdlib、-nostartfiles或-ffreestanding等不同的标志吗?
标签: c gcc arm static-linking eabi