gpt4 book ai didi

gcc - 使用 ARM GCC 时 "nosys"、 "nano"、 "rdimon"术语是什么?

转载 作者:行者123 更新时间:2023-12-03 13:34:03 27 4
gpt4 key购买 nike

我正在学习使用 GCC 工具链编写 ARM 代码。我遇到了一些找不到文档的 GCC 选项。有人可以帮忙解释一下他们是做什么的吗?

  • -specs=nosys.specs
  • -specs=nano.specs
  • -specs=rdimon.specs
  • -lnosys

  • 怎么办 -specs=nosys.specs-lnosys涉及?你是一起使用它们,还是它们相互排斥,或者其他什么?
    和 nano,我收集到暗示使用 newlib-nano 库。我已经看到它与 -lm 一起使用和 -lc .这是否只是为您提供标准的 libc 和 libm 函数?
    什么 rdimon代表?我知道它是用于“半主机”,这意味着以某种方式使用主机 IO。这是否意味着我可以打印到主机控制台?我找不到有关如何实际使用它的文档。
    如果我没有找到所有这些的真相来源,请告诉我。
    感谢您对澄清的任何帮助。

    最佳答案

    Gcc 使用规范字符串,它控制要运行的子进程以及它应该传递给它们的参数。规范字符串定义的行为可以使用规范文件覆盖,其目的和语法记录在此处:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
    查看 gcc 工具链的 lib 文件夹中的这些规范文件(例如 /usr/lib/arm-none-eabi/lib ),我们可以看到上述规范文件定义了链接器将使用哪个标准库。
    例如,nosys.specs只是定义系统调用应该实现为调用时返回错误的 stub ( -lnosys )。在这种情况下,libc 的选择取决于是否应该使用 nano。与 %G处理 libgcc 规范字符串,它定义传递给链接器的参数。
    nosys.specs:

    %rename link_gcc_c_sequence                nosys_link_gcc_c_sequence

    *nosys_libgloss:
    -lnosys

    *nosys_libc:
    %{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}

    *link_gcc_c_sequence:
    %(nosys_link_gcc_c_sequence) --start-group %G %(nosys_libc) %(nosys_libgloss) --end-group
    nano.specs定义系统包含路径和库参数以使用 newlib-nano。规范文件包含 -lc 的替代品和其他纳米等价物,例如 -lc_nano .因此,将它与这些结合使用将使 gcc 仍然将 nano 库传递给链接器。
    使用 rdimon.specs , -lrdimon作为标准库的 libgloss 部分传递。这基本上意味着您可以使用系统调用(以及 printf),但这依赖于附加的调试器,如果没有调试器,CPU 可能会崩溃。

    关于gcc - 使用 ARM GCC 时 "nosys"、 "nano"、 "rdimon"术语是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65453293/

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