gpt4 book ai didi

c - newlibc stub 应该如何包含/链接到代码中

转载 作者:行者123 更新时间:2023-12-02 09:25:39 25 4
gpt4 key购买 nike

在我的项目链接过程中,除非我在代码中显式调用其中一个 stub 函数(即 _sbrk),否则链接器会失败并出现以下错误:

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 需要的一些 stub 函数,并且我有一个“C”文件,其中包含上面提到的所有缺失的函数,并且我也确信该文件正在被编译并添加到存档文件中(*.a) 稍后链接。

我使用以下命令调用链接器

arm-none-eabi-gcc -L -T linkerscript.ld -nostartfiles -Wl,-Map,$(TARGET).map -lc archive.a

我的问题很简单(我希望)如何确保链接器将我的 stub 函数链接到 elf 文件中,而不必从我的项目文件之一进行显式函数调用?

最佳答案

我认为您遇到的这些错误是指链接器无法找到适当的库。我的第一个怀疑是您如何使用您的参数,特别是您对存档目录(-L)和 archive.a 文件的规范。我想应该是这样的:

arm-none-eabi-gcc -L. -T linkerscript.ld -nostartfiles -Wl,-Map,$(TARGET).map -lc -larchive

我要做的改变是:

  1. -L.表示使用当前目录查找要链接的库文件。
  2. -lc指定使用归档文件libc.a。
  3. -larchive指定使用归档文件libarchive.a。

有关更多信息,我建议查看GNU GCC reference .

关于c - newlibc stub 应该如何包含/链接到代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com