在我的项目链接过程中,除非我在我的代码中对某个存根函数(即_sbrk)进行显式调用,否则链接器将失败,并显示以下错误:newlibc stub应该如何包含/链接到代码中
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libg.a(lib_a-abort.o): In function `abort':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\stdlib/../../../../../newlib-1.19.0/newlib/libc/stdlib/abort.c:63: undefined reference to `_exit'
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libg.a(lib_a-signalr.o): In function `_kill_r':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/../../../../../newlib-1.19.0/newlib/libc/reent/signalr.c:61: undefined reference to `_kill'
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libg.a(lib_a-signalr.o): In function `_getpid_r':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/../../../../../newlib-1.19.0/newlib/libc/reent/signalr.c:96: undefined reference to `_getpid'
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libg.a(lib_a-sbrkr.o): In function `_sbrk_r':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\reent/../../../../../newlib-1.19.0/newlib/libc/reent/sbrkr.c:60: undefined reference to `_sbrk'
collect2: ld returned 1 exit status
我知道我需要一些存根函数的是Newlibc需要,我有一个“C”文件,该文件包含上文作为失踪提到的那些和我也正该文件被编译并添加到一个后来被链接的档案文件(* .a)。
我使用下面的命令
调用连接arm-none-eabi-gcc -L -T linkerscript.ld -nostartfiles -Wl,-Map,$(TARGET).map -lc archive.a
我的问题很简单(我希望)我怎样才能确保链接器链接我的存根功能为ELF文件,而不必做出明确函数调用从我的项目文件之一?
链接顺序在这里是否像构建可执行文件一样重要?这些错误看起来像我在将库链接到可执行文件时出错的顺序。 – Mosby 2012-03-20 04:41:44
@Mosby到目前为止,我发现解决该问题的唯一方法是通过显式调用其中一个存根函数。更改我的项目文件的链接顺序似乎对此问题没有影响 – maguirre 2012-03-20 04:46:54