【问题标题】:Undefined reference to _sbrk对 _sbrk 的未定义引用
【发布时间】:2011-08-11 11:41:59
【问题描述】:

我遇到了_sbrk 的问题。在编译的链接阶段,我使用下面的命令来链接我的对象,我得到了对 _sbrk 的未定义引用。

arm-none-eabi-ld -static -T linkerscript.ld -o exe timer_example.o /home/ziga/projects/cs_lite/arm-none-eabi/lib/libc.a /home/ziga/projects/cs_lite/lib/gcc/arm-none-eabi/4.5.1/libgcc.a

我正在为 arm926ej-s 和 ARM 模式编译,所以我认为我选择了正确的 multilib(libc.alibgcc.a),它位于文件夹home/ziga/projects/cs_lite/arm-none-eabi/lib/

我一直在互联网上搜索_sbrk 函数,它是某种内存管理调用,不包含在标准 C 库中,因为它依赖于微处理器。那么我必须自己编写_sbrk 函数吗?我该怎么做?你有 arm926ej-s 的例子吗?编写完这个函数后,我打算将它编译成一个目标文件,并将它与其他对象、库链接在一起。

【问题讨论】:

    标签: c gcc arm sbrk


    【解决方案1】:

    这有帮助:

    -mcpu=cortex-m4 -mthumb -specs=nano.specs -specs=nosys.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard

    重要的开关“似乎”是:

    -specs=nano.specs -specs=nosys.specs

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,将这些添加到链接器标志有帮助:

      -specs=nano.specs -specs=nosys.specs
      

      此外,仅使用 nosys.specs 解决了问题,但代码大小要大得多。

      【讨论】:

        【解决方案3】:

        问题与_sbrk 本身无关,而是您尝试绕过编译器驱动程序直接调用链接器。相反,使用 gcc 命令调用链接器并使用 -Wl,-linkeroptionhere 语法将额外的选项传递给链接器。

        一个可能的解决方案,如果您必须自己调用链接器。尝试在命令行末尾再次重复libc.alibgcc.a。还有一些“作为组”链接器选项可以用来实现这一点,但我不知道。

        【讨论】:

          【解决方案4】:

          最近我也遇到了这个(再次)。对我有用的最简单的解决方案是将“malloc”和“免费”api 提供/重定向到我在其上构建应用程序的 SDK 中可用的 API。

          这基本上是因为链接时缺少内存管理 api。就像上面的答案提到它并不是这里特别缺少 _sbrk 。 brk/sbrk 系统调用内部用于堆管理。因此 _sbrk 缺少关于内存管理 API 的链接。

          我注意到在某些集成中添加 -lnosys(即 libnosys.a)在一定程度上也有所帮助。

          【讨论】:

            【解决方案5】:

            使用visualgdb(使用gcc)和nanolib,我必须添加链接器标志

            -specs=nosys.specs
            

            【讨论】:

              【解决方案6】:

              我解决了这个问题,并将在这里发布解决方案,以便我回馈社区。函数_sbrk 位于 ARM 的 NXP CDL 包内。软件包可供下载(链接供所有不知道的人使用) here 在子文件夹 CDL_v005/csps/lpc313x/bsps/ea3131/source 中,您将找到名为 libnosys_gnu.c 的源文件,应将其添加到项目中并编译为对象文件,然后与其他对象和库一起链接到可执行文件。

              祝愿一切顺利。

              【讨论】:

                猜你喜欢
                • 2015-12-03
                • 2014-05-04
                • 1970-01-01
                • 2018-01-27
                • 2016-12-26
                • 2011-03-27
                • 2022-01-22
                • 2016-04-04
                • 2015-11-03
                相关资源
                最近更新 更多