c/c++语言开发共享未定义的_sbrk引用

我遇到了_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.a和libgcc.a),它位于文件夹home / ziga / projects / cs_lite / arm-none-eabi / lib / 。

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

亲切的问候,Ziga。


我解决了这个问题并将在这里发布解决方案,所以我回馈社区。 函数_sbrk位于ARM的NXP CDL包中。 包可供下载(链接适用于所有不熟悉此function的人): http ://www.lpclinux.com/Downloads/WebHome在子文件夹CDL_v005 / csps / lpc313x / bsps / ea3131 / source中,您将找到命名的源文件libnosys_gnu.c应该添加到项目中并编译到目标文件,之后链接到可执行文件以及其他对象和库。

祝愿和成功。

    这有助于:

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

    重要的开关“似乎”是:

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

    这个问题与_sbrk本身没什么关系,而是你试图直接调用链接器,绕过编译器驱动程序。 相反,使用gcc命令调用链接器和-Wl,-linkeroptionhere语法以将额外选项传递给链接器。

    一种可能的解决方案,如果您必须自己调用链接器。请尝试在命令行末尾libc.a重复libc.alibgcc.a 。 还有一些“as group”链接器选项可用于实现此目的但我不知道它是正确的。

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

    基本上它发生是因为链接时缺少mem管理api。 像上面的回答一样提到它并不是说_sbrk在这里特别缺失。 brk / sbrk syscall用于堆管理。 因此_sbrk,在mem管理apis方面缺少链接。

    我注意到添加-lnosys(即libnosys.a)在一些集成中也有助于这种程度。

    需要了解更多c/c++开发分享未定义的_sbrk引用,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享未定义的_sbrk引用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979916.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐